暂停并恢复performDelector afterDelay?

时间:2014-07-17 12:10:47

标签: ios objective-c performselector

我想要做的是在游戏延迟之后调用一个方法来重新加载武器,但是如果我这样做并且用户暂停游戏选择器没有暂停,那么用户可以通过暂停来作弊。

所以我想知道是否有办法暂停它然后继续。

我知道如何取消选择器:cancelPreviousPerformRequestsWithTarget:但我希望它能够在用户恢复游戏后继续。

这是正确的做法还是我应该考虑另一种策略?

1 个答案:

答案 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动画的工作方式以及暂停这些动画的可能性。