Ios 旋转UIImageView,然后在';分接';(动画)
所以,我已经工作了几个小时试图解决这个问题,我想它可能只是遗漏了一些显而易见的东西 我想做的是让一条线(像秒针一样)沿顺时针方向旋转,但当屏幕被按下时,它会停止,但当再次按下时,它会再次启动,但旋转会反转,线开始逆时针旋转 这是我用来围绕固定点旋转直线的代码,它可以工作:Ios 旋转UIImageView,然后在';分接';(动画),ios,uiimageview,rotation,Ios,Uiimageview,Rotation,所以,我已经工作了几个小时试图解决这个问题,我想它可能只是遗漏了一些显而易见的东西 我想做的是让一条线(像秒针一样)沿顺时针方向旋转,但当屏幕被按下时,它会停止,但当再次按下时,它会再次启动,但旋转会反转,线开始逆时针旋转 这是我用来围绕固定点旋转直线的代码,它可以工作: - (void) spinWithOptions: (UIViewAnimationOptions) options { [UIView animateWithDuration: 0.0f
- (void) spinWithOptions: (UIViewAnimationOptions) options {
[UIView animateWithDuration: 0.0f
delay: 0.0f
options: options
animations: ^{
Hand.layer.anchorPoint = CGPointMake(0.5,1);
Hand.transform = CGAffineTransformRotate(Hand.transform, M_PI / 40);
}
completion: ^(BOOL finished) {
if (finished) {
if (animating) {
// if flag still set, keep spinning with constant speed
[self spinWithOptions: UIViewAnimationOptionCurveLinear];
} else if (options != UIViewAnimationOptionCurveEaseOut) {
// one last spin, with deceleration
//[self spinWithOptions: UIViewAnimationOptionCurveEaseOut];
}
}
}];
}
- (void) startSpin {
if (!animating) {
animating = YES;
[self spinWithOptions: UIViewAnimationOptionCurveEaseIn];
Clockwise = NO;
}
}
- (void) spinWithOptions_Anti: (UIViewAnimationOptions) options {
[UIView animateWithDuration: 0.0f
delay: 0.0f
options: options
animations: ^{
Hand.layer.anchorPoint = CGPointMake(0.5,1);
Hand.transform = CGAffineTransformRotate(Hand.transform, -M_PI / 40);
}
completion: ^(BOOL finished) {
if (finished) {
if (animating) {
// if flag still set, keep spinning with constant speed
[self spinWithOptions: UIViewAnimationOptionCurveLinear];
} else if (options != UIViewAnimationOptionCurveEaseOut) {
// one last spin, with deceleration
//[self spinWithOptions: UIViewAnimationOptionCurveEaseOut];
}
}
}];
}
- (void) startSpin_Anti {
if (!animating) {
animating = YES;
[self spinWithOptions_Anti: UIViewAnimationOptionCurveEaseIn];
Clockwise = YES;
}
}
- (void) stopSpin {
animating = NO;
}
因此,在应用程序开始时,ViewDidload调用startSpin
,调用spinWithOptions
,该行开始顺时针旋转
果不其然,如果我按下屏幕,旋转动画将停止,如下所示
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event{
NSLog(@"Dircetion: %i", Clockwise);
if(animating){
[self stopSpin];
}
else{
if(Clockwise){
[self startSpin];
NSLog(@"must be clockwise");
}
else{
[self startSpin_Anti];
NSLog(@"anti");
}
}
}
但当再次按下时,它会开始旋转,但不会改变方向。。。它只会顺时针旋转
我只是不明白为什么它不会改变方向。。。甚至NSLogs也说顺时针方向的布尔值是正确的…当你调用
spinWithOptions\u Anti
时,在添加新动画之前尝试从你的手对象中移除动画。如何移除所有动画?有一种方法如下:[Hand.layer removeAllAnimations]代码>它仍然不起作用:(是的,我实际上认为你会想在另一个位置移除警报,可能在stopSpin
中。你确定反向代码起作用并将其旋转到正确的方向吗?