我想要做的是在游戏延迟之后调用一个方法来重新加载武器,但是如果我这样做并且用户暂停游戏选择器没有暂停,那么用户可以通过暂停来作弊。
所以我想知道是否有办法暂停它然后继续。
我知道如何取消选择器:cancelPreviousPerformRequestsWithTarget:
但我希望它能够在用户恢复游戏后继续。
这是正确的做法还是我应该考虑另一种策略?
答案 0 :(得分:0)
这绝对不是一个解决这个问题的好方法,但它为我做了诀窍。 我有一个缩放动画,视图增长到6.0,等待2秒,然后缩小到1.0。 等待2秒是我使用performSelector的部分:withObject:afterDelay:我无法暂停。
这是暂停部分:
[UIView animateWithDuration:0 delay:2.0 options:0 animations:^{
self.transform = CGAffineTransformMakeScale(6.0 + 0.001, 6.0 + 0.001);
} completion:^(BOOL finished) {
[self animateOutWithCompletion:completion];
}];
确保你的动画是一个变化,这就是为什么我添加0.001(你不会看到,因为它是一个小变化)。
可以使用此类别暂停UIView动画:
@interface UIView (AnimationsHandler)
- (void)pauseAnimations;
- (void)resumeAnimations;
@end
@implementation UIView (AnimationsHandler)
- (void)pauseAnimations
{
CFTimeInterval paused_time = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.layer.speed = 0.0;
self.layer.timeOffset = paused_time;
}
- (void)resumeAnimations
{
CFTimeInterval paused_time = [self.layer timeOffset];
self.layer.speed = 1.0f;
self.layer.timeOffset = 0.0f;
self.layer.beginTime = 0.0f;
CFTimeInterval time_since_pause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time;
self.layer.beginTime = time_since_pause;
}
随意使用此代码,但正如我之前所说,这不是解决此问题的好方法。它只是利用了UIView动画的工作方式以及暂停这些动画的可能性。