我有一个简单的脉冲动画,运行得很完美。
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的比例上。
发布于 2017-11-28 10:24:03
似乎属性动画器在完成后删除动画(这将解释再次启动它将没有任何效果)-请参阅所以问题。基于此,您可以尝试通过pausesOnCompletion对其进行黑客攻击,但我希望这不会像您想象的那么容易。仅仅因为文档说:
当此属性的值为true时,动画处理程序在动画结束时仍处于活动状态,而则不执行其完成处理程序.。
这意味着如果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()发布于 2017-11-26 14:03:33
我认为您的代码被这样翻译得更好
尝试使用此代码
let animator = UIViewPropertyAnimator(duration: 1, curve: .linear) {
self.animatableView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}
animator.addAnimations({
self.animatableView.transform = CGAffineTransform.identity
}, delayFactor: 0.5)
animator.startAnimation()或者您可以尝试使用UILayer动画。
尝试使用UILayer动画
let layerAnimation = CABasicAnimation(keyPath: "transform.scale")
layerAnimation.fromValue = 1
layerAnimation.toValue = 1.2
layerAnimation.isAdditive = false
layerAnimation.duration = CFTimeInterval(1)
layerAnimation.fillMode = kCAFillModeForwards
layerAnimation.isRemovedOnCompletion = true
layerAnimation.repeatCount = .infinity
layerAnimation.autoreverses = true
self.animatableView.layer.add(layerAnimation, forKey: "growingAnimation")https://stackoverflow.com/questions/47496584
复制相似问题