ios - 使用 UIViewPropertyAnimator 按顺序动画 UIView 的 alpha

标签 ios swift xcode uiview

我有一个 UIView,我想在 0.5 秒后显示,并在 0.5 秒后再次隐藏,创建一个简单的动画。我的代码如下:

    let animation = UIViewPropertyAnimator.init(duration: 0.5, curve: .linear) {
        self.timerBackground.alpha = 1
        let transition = UIViewPropertyAnimator.init(duration: 0.5, curve: .linear) {
            self.timerBackground.alpha = 0
        }
        transition.startAnimation(afterDelay: 0.5)
    }
    animation.startAnimation()

当我测试它时,没有任何反应。我认为这是因为它们同时运行,这意味着它们相互抵消,但这不是“afterDelay”部分应该防止的吗?

如果我分别运行它们,即从隐藏淡化到可见,或者从可见淡化到隐藏,它会起作用,但是当我尝试按顺序运行它们时,它不起作用。

我的 UIView 不是不透明的或隐藏的。

最佳答案

您可以使用 Timer,并在每个计时器滴答上向您的 UIViewPropertyAnimator 对象添加出现/隐藏动画 block 。

这是一个代码库:

@IBOutlet weak var timerBackground: UIImageView!

private var timer: Timer?
private var isShown = false
private var viewAnimator = UIViewPropertyAnimator.init(duration: 0.5, curve: .linear)

override func viewDidLoad() {
    super.viewDidLoad()
    viewAnimator.addAnimations {
        self.timerBackground.alpha = 1
    }
    viewAnimator.startAnimation()
    isShown = true

    self.timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.startReversedAction), userInfo: nil, repeats: true)
}

func startReversedAction() {
    // stop the previous animations block if it did not have time to finish its movement
    viewAnimator.stopAnimation(true)
    viewAnimator.addAnimations ({
        self.timerBackground.alpha = self.isShown ? 0 : 1
    })
    viewAnimator.startAnimation()
    isShown  =  !isShown
}

我已经为 dots jumping 实现了非常相似的行为的 iOS 10 Animations demo project .

请随时查看它以获取更多详细信息。

关于ios - 使用 UIViewPropertyAnimator 按顺序动画 UIView 的 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971408/

相关文章:

ios - 想将数据保存在 nsuserdefault 中并将其传输到另一个 Controller 的 TableView 中

ios - 在 Xcode 7 中将 PDF 用于 Assets - SpriteKit

ios - tableview 单元格操作问题 xcode

swift - 如何使用 Alamofire 上传图片并在参数中引用文件

iOS - 并发访问内存资源

ios - 如何使用 Fandango API?

ios - 向其添加本地化后加载 JSON 失败 Swift 3

ios - UIScrollView中的UIView不调整宽度

ios - 在哪里访问 IBOutlet var 并使用它来定义类可访问的常量

swift - PdfKit 注释突出显示并保存 IOS 11