UIViewAnimation仅完成180度旋转

时间:2013-09-05 13:09:34

标签: ios objective-c uiimageview

我正在为我的加载动画寻找一种不确定的动画技术。用户单击登录,当JSON内容正在处理时,微调器旋转然后最终呈现新的视图控制器或登录错误。我发现 Nate 给出了一个很棒的code snippet

代码由:

给出
// an ivar for your class:
BOOL animating;

- (void) spinWithOptions: (UIViewAnimationOptions) options {
   // this spin completes 360 degrees every 2 seconds
   [UIView animateWithDuration: 0.5f
                         delay: 0.0f
                       options: options
                    animations: ^{
                       self.imageToMove.transform = CGAffineTransformRotate(imageToMove.transform, M_PI / 2);
                    }
                    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];
   }   
}

- (void) stopSpin {
    // set the flag to stop spinning after one last 90 degree increment
    animating = NO;
}

当用户点击“登录”时,会调用startSpin方法,并发送JSON内容。在我的JSON post方法中,我有这个:

if(success == 1) {
//Present the new view controller
}
else {
[self performSelectorOnMainThread:@selector(stopSpin) withObject:nil waitUntilDone:NO];
[self performSelectorOnMainThread:@selector(hideAnimation) withObject:nil waitUntilDone:NO];

}

这个动画方法适用于我稍后在我的应用中使用的上传页面。但是,对于这个应用程序,它只旋转180度然后停止。然后,在无生命图像的时间间隔之后最终加载下一页/错误。有没有人知道为什么会这样?我不认为它与视图控制器部分有任何关系,因为即使登录失败也不会停止旋转(没有显示视图控制器)。我使用以下方法点击按钮调用startSpin方法:

[self performSelectorOnMainThread:@selector(showAnimation) withObject:nil waitUntilDone:NO];
[self performSelectorOnMainThread:@selector(startSpin) withObject:nil waitUntilDone:NO];

show动画只是一种取消隐藏视图的方法。

任何想法都赞赏。

1 个答案:

答案 0 :(得分:0)

基本上你将变换设置为旋转到Pi / 2,180度,然后将第二轮设置为相同的值。将某些内容设置为与之前相同的值将不会为其设置动画。你可以找到一种方法来为旋转变换添加另外180度。