Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 旋转UIImageView,然后在';分接';(动画)_Ios_Uiimageview_Rotation - Fatal编程技术网

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
中。你确定反向代码起作用并将其旋转到正确的方向吗?