0

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

代码由以下给出:

// 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];

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

任何想法表示赞赏。

4

1 回答 1

0

基本上,您将变换设置为旋转到 Pi/2,180 度,第二轮将其设置为相同的值。将某些内容设置为与以前相同的值不会对其进行动画处理。您需要找到一种方法将另一个 180 度添加到旋转变换中。

于 2013-09-05T13:25:01.357 回答