我有一个完美运行的简单脉冲动画
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()
但我的动画视图只是缩放到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,y: 1.2) } animator.addCompletion { _ in let secondAnimator = UIViewPropertyAnimator(duration: 1,curve: .linear) { animatableView.transform = CGAffineTransform.identity } secondAnimator.startAnimation() } animator.startAnimation()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。