我有一个简单的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)再次长按 - 动画再次启动。
我该如何解决这个问题?
答案 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?