Ios 停止后重新启动旋转动画
在经历了很多改变/尝试了很多事情之后,我已经到了一个真正被卡住的阶段 我有一个旋转的Ios 停止后重新启动旋转动画,ios,objective-c,animation,uiimageview,Ios,Objective C,Animation,Uiimageview,在经历了很多改变/尝试了很多事情之后,我已经到了一个真正被卡住的阶段 我有一个旋转的UIImageview,它可以无限旋转,直到屏幕按下为止。。。此时,如果旋转值与某个值匹配(落在游戏中的目标上),目标移动,游戏继续。。。如果你在按下屏幕后过度射击目标,游戏结束。简单的游戏 我的问题是,在您结束游戏并且动画停止后,屏幕上会出现一个ui按钮,它会使用模块将您带回相同的视图控制器。(我已经为许多应用程序这么做了,效果很好) 除此之外,这一次,假设你得了4分(命中4个目标),然后错过了第5场比赛及其结
UIImageview
,它可以无限旋转,直到屏幕按下为止。。。此时,如果旋转值与某个值匹配(落在游戏中的目标上),目标移动,游戏继续。。。如果你在按下屏幕后过度射击目标,游戏结束。简单的游戏
我的问题是,在您结束游戏并且动画停止后,屏幕上会出现一个ui按钮
,它会使用模块
将您带回相同的视图控制器
。(我已经为许多应用程序这么做了,效果很好)
除此之外,这一次,假设你得了4分(命中4个目标),然后错过了第5场比赛及其结束,当你按下按钮重新启动初始ViewController(基本上是重新加载ViewDidLoad)时,动画将不会开始。。。即使分数和其他东西重置正确
这是我如何实现动画的:
- (void) spinWithOptions: (UIViewAnimationOptions) options {
[UIView animateWithDuration: 0.0f
delay: 0.0f
options: options
animations: ^{
Hand.transform = CGAffineTransformRotate(Hand.transform, M_PI / 30);
}
completion: ^(BOOL finished) {
if (finished) {
if (animating) { //if, keep spinning
[self spinWithOptions: UIViewAnimationOptionCurveLinear];
} else if (options != UIViewAnimationOptionCurveEaseOut) { //final spin
//[self spinWithOptions: UIViewAnimationOptionCurveEaseOut dir:direction];
}
}
}];
}
- (void) startSpin {
[Hand.layer removeAllAnimations];
if (!animating) {
animating = YES;
[self spinWithOptions: UIViewAnimationOptionCurveEaseIn];
}
}
- (void) stopSpin {
animating = NO;
inGame = NO;
}
我在不同的地方尝试了removeAllAnimations
,我想可能是。。。但是我不明白为什么,如果调用ViewDidLoad/ViewController重置,并且您回到了开始,为什么动画不会重新启动
我之所以选择这种旋转方法,是因为我可以跟踪旋转值并存储它,这样我就可以重新启动动画,或者我想……我不知道如何调用
spinWithOptions
。此外,在故障点设置动画是或否?您需要对单步执行和断点进行一些调试,并找出发生了什么情况。spinWithOptions
在-(void)startSpin
中调用,它在ViewDidLoad
中调用……您确定多次调用ViewDidLoad吗?也许你应该在视图中打电话给startSpin这是因为你的视图从未发布过吗?您在完成块中强烈地捕获了self
,这可能导致一个保留周期。如果是这样,第二个viewdiload
将在视图的新实例上调用,而不是您期望的实例。如何释放视图?