我正在为我的加载动画寻找一种不确定的动画技术。用户单击登录,当 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];
显示动画只是一种取消隐藏视图的方法。
任何想法表示赞赏。