【问题标题】:Pause/Resume NSTimer [duplicate]暂停/恢复 NSTimer [重复]
【发布时间】:2014-05-23 13:28:09
【问题描述】:

我知道这个问题已经被问过了,我已经浏览了所有的帖子,但我仍然无法让它工作,我想我只是一个菜鸟。

这就是问题所在。我遵循了有关如何创建点击游戏的教程,我正在尝试添加一个暂停按钮,以便当玩家点击它时,计时器(仅持续 30 秒)暂停,而不是停止,然后恢复。我已经尝试实施其他解决方案,但我无法集成它,程序不断崩溃。以下是我创建的方法:

    //Pause Game Methods
    -(void)pauseTimer {
        if(isPaused == YES) {
           //IMPLEMENT SOMETHING
        }
    }

    - (IBAction)pauseButton:(UIButton *)sender {
      isPaused = YES;
    }

    - (IBAction)resumeButton:(UIButton *)sender {
      isPaused = NO;
    }

感谢任何帮助。

【问题讨论】:

标签: ios objective-c xcode ios7 nstimer


【解决方案1】:

您不能暂停和恢复计时器。要“暂停”,请使计时器无效并将其丢弃(您绝不能触摸无效的计时器)。要“恢复”,就像旧的一样制作一个新的。

【讨论】:

  • 扔掉是什么意思?我的理解是,如果我使将完全停止它的计时器失效,那么当我创建一个新的计时器时,它将从 30 年代开始,而不是从它失效时停止时开始。
  • 扔掉意味着扔掉(即消除你对它的引用)。 - 计时器不会“从”任何东西“开始”。他们只是定期开火。任何计数都取决于您的其他代码。
  • @matt,关于使计时器无效并创建一个“新计时器”。但是,如果你暂停一个计时器,它会在下一个计时器事件(即你恢复)之前还有一些时间,但是如果你丢弃它并开始一个新的,它总是会出现问题。有事件之前的原始时间吗?
  • @Pangu 我不知道您所说的“问题”或“暂停计时器”是什么意思。您不能暂停计时器。您只能通过使其无效来停止它,一旦您这样做了,您将无法再次使用它。这些只是事实。
  • @Pangu 但问题是你做错了。首先,不推荐使用 MPMoviePlayerController。其次,您不应该通过使用计时器进行轮询来执行此操作。这种事情正是 AVPlayer addPeriodicTimeObserverForInterval:queue:usingBlock: 的用途。
【解决方案2】:

使用和处理 NSTimer 的正确方法是:

BOOL isTimerValid = TRUE;
myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(doAction) userInfo:nil repeats:YES];

现在停止:

if (isTimerValid == TRUE)
{
    [ScrollTimer invalidate];
    isTimerValid = FALSE;
}

注意:NSTimer 中没有提供暂停或恢复的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多