我正在制作一个 Simon Says 应用程序来了解有关 Objective C 的更多信息。
我的 SimonSaysViewController 有 4 个按钮。当向用户显示图案时,他们的图像需要相应地改变。
固定间隔计时器绝对没问题。
我似乎找不到一个例子。
我基本上想要一种设置,例如:
当我可以执行图像交换逻辑时的 TimerTicked 回调。
理想情况下,TimerTicked 方法将是我的 SimonSaysViewController 的方法。
这将如何完成?
谢谢
我正在制作一个 Simon Says 应用程序来了解有关 Objective C 的更多信息。
我的 SimonSaysViewController 有 4 个按钮。当向用户显示图案时,他们的图像需要相应地改变。
固定间隔计时器绝对没问题。
我似乎找不到一个例子。
我基本上想要一种设置,例如:
当我可以执行图像交换逻辑时的 TimerTicked 回调。
理想情况下,TimerTicked 方法将是我的 SimonSaysViewController 的方法。
这将如何完成?
谢谢
NSTimer 是你的朋友!将 NSTimer 属性添加到您的 SimonSaysViewController。
@property (strong, nonatomic) NSTimer *tickTockTimer;
根据您希望计时器何时启动,您需要设置计时器。假设您希望在视图首次出现时启动计时器:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.tickTockTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
}
然后实现该timerFired方法并在那里做你需要的事情。
- (void)timerFired:(NSTimer *)timer {
//change the image.
}
完成后不要忘记使计时器无效。
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.timer invalidate];
self.timer = nil;
}
这种事情通常对我有用
NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0]; // 2 sec from now
NSTimer *self.timer = [[NSTimer alloc] initWithFireDate:fireDate interval:5 target:self selector:@selector(timerDidTick) userInfo:nil repeats:YES]; // fire 5 sec apart
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:self.timer forMode:NSDefaultRunLoopMode];