如何根据动画的进度向已经运行的动画添加动画?

时间:2019-03-13 16:11:19

标签: ios animation uiviewanimation uiviewpropertyanimator

目标

构建复杂的动画,并根据其进度触发一些动作。

问题

是否可以检查UIViewPropertyAnimator的进度并在达到给定分数时添加动画,从而完成以下操作:

  • 不使用UIView.animateKeyframes
  • 不需要用户 干预

换句话说,当动画师达到给定的fractionComplete时,会向其中添加一些动画。

问题

完整动画包括不同对象的多个动画(存储在数组中)。我需要既在给定时间添加动画(基于完成百分比),又在完成某些动画时添加动作

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

UIView动画设计用于轻量级动画。

如果您想制作复杂的动画,我认为最好使用CAAnimation

您可以使用CAAnimationGroupkeyTimes对其进行同步和分组。

一个可能有用的参考是raywenderlich.com上的“ How to Create a Complex Loading Animation in Swift”教程

答案 1 :(得分:0)

在某些属性中,您可以控制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()