如何定义动画?

时间:2017-06-07 06:29:24

标签: ios swift xcode animation

我正在寻找让变量等于动画的方法。所以稍后我可以参考它并改变动画的速度。

   // Image Animation
UIView.animate(withDuration: 2.5, delay: 0.8, options: [.repeat, .curveLinear], animations: {
    self.image.frame = CGRect(x: 250, y: 1200, width: 45, height: 45)

    }, completion: nil)

//功能速度检查

func speedcheck() {

    if score > 25 {

        Image.stopAnimating()

        // Image Animation
        UIView.animate(withDuration: 1.0, delay: 0.8, options: [.repeat, .curveLinear], animations: {
            self.Image.frame = CGRect(x: 250, y: 1200, width: 45, height: 45)

        }, completion: nil)

        UIView.commitAnimations()

            }        
}

" Image.stopAnimating()"

如示例所示,此行不会停止先前在上面执行的动画,因为它不知道要停止什么。因此,我想知道如何定义初始动画,所以从那里我可以提高速度。

当分数大于25时,加速动画的最佳方式是什么?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您实际上不需要将动画分配给变量。我认为这甚至不可能。

通过加快动画速度,您的意思是减少动画的持续时间。 要做到这一点,只需在全局变量中保持 animationDuration 值,例如 animationSpeed

只需在 UIView.animate()方法中使用此 animationSpeed 变量值作为持续时间参数。

宣布全球速度参数:

var animationSpeed = TimeInterval.init(5.0)

在UIView.animate()方法中使用它:

UIView.animate(withDuration: animationSpeed) { 

}

现在,您可以在满足条件时更改此animationSpeed参数值:

if condition {
 self.animationSpeed = TimeInterval.init(2.5)
}

当您将动画选项指定为.repeat时,在整个动画中将使用最初在进入动画块时捕获的值。这不是我们想要的。使用类似这样的东西

func animateView() {

        UIView.animate(withDuration: self.speed, delay: 0.0, options: [.curveLinear], animations: {

            // Your animation

        }, completion: { flag in

            if flag {
              if speed > 25 {
                self.speed = TimeInterval.init(2.0)
                self.view.layer.removeAllAnimations()
              }

                self.animateView() 
            }
        })
    }