重复动画重启按钮的位置

时间:2018-04-06 14:08:49

标签: ios swift uiviewanimation

我是Swift编码的新手。我正在处理动画,我遇到了问题。

UIView.animate(withDuration: TimeInterval(waitTime), delay: 0, options: [.allowUserInteraction, .allowAnimatedContent, .curveLinear, .repeat], animations: {

    UIView.setAnimationRepeatCount(Float(self.clickAccuracy))

    // Animate tiles going down
    self.tileButton1.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
    self.tileButton2.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
    self.tileButton3.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
    self.tileButton4.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
    self.tileButton5.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)

})

在这里,我想重复向下移动UIButton的动画。 (我必须在较小的块中重复动画,因为我希望能够点击移动按钮)。但是,按钮按照它们的意图向下移动,但不是从该位置再次重复,而是重置。这会导致无限的闪烁。

我需要的只是让按钮向下移动,而不会将位置重新启动到原始位置,这样我就可以获得平滑的动画效果。谢谢!

以下是视频 https://i.imgflip.com/27uzl3.gif

1 个答案:

答案 0 :(得分:0)

事实证明,我所做的最初方式似乎并没有奏效。所以我改成了这个:

var numberOfIterations = 0

func repeatAnimation() {

    UIView.animate(withDuration: TimeInterval(waitTime), delay: 0, options: [.allowUserInteraction, .allowAnimatedContent, .curveLinear, .curveLinear], animations: {

        //UIView.setAnimationRepeatCount(Float(self.clickAccuracy))

        // Animate tiles going down
        self.tileButton1.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
        self.tileButton2.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
        self.tileButton3.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
        self.tileButton4.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)
        self.tileButton5.center.y += self.tileButtonExample.frame.height / CGFloat(self.clickAccuracy)

    }, completion: { (Finished) in

        numberOfIterations += 1

        // Repeat
        if numberOfIterations != self.clickAccuracy {

            self.repeatAnimation()

        }

    })

}

当@rmaddy给我这个答案时,我们忘记删除setAnimationRepeatCount(已注释掉)。为了使这个重复设定次数,我在完成块中添加了if语句。

我还在动画选项中摆脱了.repeat

感谢大家的帮助!