2

我有一个简单的 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)再次长按 - 动画再次开始。

我该如何解决?

4

1 回答 1

0

它是动画 - 它只是看起来不像,因为你一直在向角度添加 180。

假设从angle180 开始,您从 0 到 180 然后从 180 到 180 再从 180 到 180 进行动画处理。然后角度为 +180,将角度置于 360,初始动画为 360,解释为 0,所以标签的动画从 0 到 0。

改变

angle = angle + 180;

angle = angle + 30;

你应该看到旋转发生了。

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

如何连续旋转 UIButton 并能够停止它?

于 2014-11-19T04:44:47.917 回答