gpt4 book ai didi

ios - UIViewPropertyAnimator 反向动画

转载 作者:可可西里 更新时间:2023-11-01 05:32:39 27 4
gpt4 key购买 nike

我有一个运行完美的简单脉冲动画

UIView.animate(withDuration: 1, animations: {
myAnimatableView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}) { _ in
UIView.animate(withDuration: 1, animations: {
myAnimatableView.transform = .identity
})
}

我想制作相同的动画,但现在使用 UIViewPropertyAnimator。是否可以使用新 API 优雅地复制这种脉冲效果?

我是这样做的

let animator = UIViewPropertyAnimator(duration: 1, curve: .linear) {
animatableView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}
animator.addCompletion { _ in
animator.isReversed = true
animator.startAnimation()
}
animator.startAnimation()

但我的 animatableView 只是缩放到 1.2。

最佳答案

属性动画师似乎在完成后删除了动画(这将解释再次启动它不会有任何效果)- 参见 SO question .基于此,您可以尝试通过 pausesOnCompletion 对其进行破解,但我认为这并不像您想象的那么容易。仅仅因为 documentation说:

When the value of this property is true, the animator remains in the active state when the animation finishes, and it does not execute its completion handler.

这意味着如果 pauseOnCompletion 设置为 true,则不会调用完成处理程序。根据同一文档,您可以通过观察动画制作器的 isRunning 属性来确定动画制作器何时结束(以及何时应该重新启动动画)。然而,当我尝试实现它时,我发现 isRunning 上的 KVO 在动画师的生命周期中没有被调用。因此我最后的建议是简单地使用两个动画师,因为它看起来更容易实现:

let animator = UIViewPropertyAnimator(duration: 1, curve: .linear) {
animatableView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}
animator.addCompletion { _ in
let secondAnimator = UIViewPropertyAnimator(duration: 1, curve: .linear) {
animatableView.transform = CGAffineTransform.identity
}
secondAnimator.startAnimation()
}
animator.startAnimation()

关于ios - UIViewPropertyAnimator 反向动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47496584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com