如何根据后者的进度向已经 运行 的动画添加动画?
How to add animations to an already running animation based on the progress of the latter?
OBJECTIVE
构建一个复杂的动画,根据其进度触发一些动作。
问题
是否可以检查 UIViewPropertyAnimator
的进度并在达到给定分数完成时添加动画:
- 不使用
UIView.animateKeyframes
- 不需要用户
干预
换句话说,当animator达到给定的fractionComplete时,一些动画被添加到它。
问题
完整的动画包括不同对象的多个动画(存储在一个数组中)。我需要 在给定时间添加动画(基于完成百分比)并在某些动画完成时添加动作。
感谢您的帮助!
UIView 动画专为轻量级动画而设计。
如果你想构建复杂的动画,我认为最好使用 CAAnimation。
您可以使用CAAnimationGroup and keyTimes对它们进行同步和分组。
一个可能有用的参考是 raywenderlich.com
中的“How to Create a Complex Loading Animation in Swift”教程
在某些属性中,您可以控制delayFactor添加动画来替换之前的目标。
let animView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 200))
animView.backgroundColor = UIColor.green
animator = UIViewPropertyAnimator.init(duration: 5.0, curve: UIView.AnimationCurve.easeInOut)
view.addSubview(animView)
animator.addCompletion { (position : UIViewAnimatingPosition) in
if position == UIViewAnimatingPosition.end{
animView.center = CGPoint.init(x: 100, y: 300)
}
}
animator.addAnimations({
animView.center = CGPoint.init(x: 600, y: 300)
})
animator.addAnimations({
animView.center = CGPoint.init(x: 200, y: 200)
}, delayFactor: 0.1)
animator.addAnimations({
animView.center = CGPoint.init(x: 300, y: 600)
}, delayFactor: 0.5)
animator.addAnimations({
animView.center = CGPoint.init(x: 400, y: 400)
}, delayFactor: 0.9)
animator.startAnimation()
OBJECTIVE
构建一个复杂的动画,根据其进度触发一些动作。
问题
是否可以检查 UIViewPropertyAnimator
的进度并在达到给定分数完成时添加动画:
- 不使用
UIView.animateKeyframes
- 不需要用户 干预
换句话说,当animator达到给定的fractionComplete时,一些动画被添加到它。
问题
完整的动画包括不同对象的多个动画(存储在一个数组中)。我需要 在给定时间添加动画(基于完成百分比)并在某些动画完成时添加动作。
感谢您的帮助!
UIView 动画专为轻量级动画而设计。
如果你想构建复杂的动画,我认为最好使用 CAAnimation。
您可以使用CAAnimationGroup and keyTimes对它们进行同步和分组。
一个可能有用的参考是 raywenderlich.com
中的“How to Create a Complex Loading Animation in Swift”教程在某些属性中,您可以控制delayFactor添加动画来替换之前的目标。
let animView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 200))
animView.backgroundColor = UIColor.green
animator = UIViewPropertyAnimator.init(duration: 5.0, curve: UIView.AnimationCurve.easeInOut)
view.addSubview(animView)
animator.addCompletion { (position : UIViewAnimatingPosition) in
if position == UIViewAnimatingPosition.end{
animView.center = CGPoint.init(x: 100, y: 300)
}
}
animator.addAnimations({
animView.center = CGPoint.init(x: 600, y: 300)
})
animator.addAnimations({
animView.center = CGPoint.init(x: 200, y: 200)
}, delayFactor: 0.1)
animator.addAnimations({
animView.center = CGPoint.init(x: 300, y: 600)
}, delayFactor: 0.5)
animator.addAnimations({
animView.center = CGPoint.init(x: 400, y: 400)
}, delayFactor: 0.9)
animator.startAnimation()