使用removeAllAnimations停止UIViewAnimation

时间:2014-11-19 01:28:10

标签: ios animation uiviewanimation animatewithduration

我有一个简单的UILabel,当你长按它时会开始旋转。我使用以下代码成功实现了这一目标:

-(IBAction)longPressEffect:(UILongPressGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {

        UIViewAnimationOptions animationOptions = UIViewAnimationCurveLinear | UIViewAnimationOptionRepeat;

        [UIView animateWithDuration:0.4 delay:0.0 options:animationOptions animations:^ {
            labelObject.transform = CGAffineTransformMakeRotation(DegreesToRadians(angle));
        } completion:nil];

        angle = angle + 180;
    }
    else if (sender.state == UIGestureRecognizerStateEnded) {
        ;
    }
}

用户只需双击标签即可随时停止此动画。这是代码:

-(IBAction)doubleTapEffect:(UITapGestureRecognizer *)sender {
    [labelObject.layer removeAllAnimations];
    labelObject.transform = CGAffineTransformMakeRotation(DegreesToRadians(0));

}

问题在于,下次长按标签时,它没有响应。旋转动画不会再次启动。您必须再次点击再次才能再次使用它。

所以模式是:
1)长按 - 动画开始
2)双击 - 动画停止
3)长按 - 没有任何反应
4)再次长按 - 动画再次启动。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

它是动画 - 它看起来并不像是,因为你总是在角度上加180。

假设angle为180开始,你的动画从0到180然后180到180左右然后180到180左右。然后角度为+ 180,角度为360,初始动画为360,被解释为0,因此标签的动画从0到0。

更改

angle = angle + 180;

angle = angle + 30;

你应该看到轮换发生了。

此链接可能会帮助您进行连续轮换,如果您正在尝试这样做:

How can I rotate a UIButton continuously and be able to stop it?