我正在开发一款非常简单的iPhone游戏,其中包括根据随机语音提示连续多次选择正确的彩色按钮。我设置它,如果按钮是一种颜色并被点击,它总是每次都变为硬编码颜色(例如,如果你点击红色,它总是变成蓝色)。颜色变化方法在IBOutlet中设置。我在while循环中设置了一个计时器,当计时器结束时,它检查玩家是否做出了正确的选择。问题是在计时器用完之后才会发生按钮颜色更改,这会导致用于检查正确答案的方法出现问题。有没有办法让这种颜色变化立即发生?从我搜索到的内容来看,我知道它与故事板动作有关,直到代码执行之后才会发生,但我没有发现使用计时器的任何事情。以下是在答案正确时调用计时器的方法部分:
BOOL rightChoice = true;
int colorNum;
NSDate *startTime;
NSTimeInterval elapsed;
colorNum = [self randomizeNum:middle];
[self setTextLabel:colorNum];
while (rightChoice){
elapsed = 0.0;
startTime = [NSDate date];
while (elapsed < 2.0){
elapsed = [startTime timeIntervalSinceNow] * -1.0;
NSLog(@"elapsed time%f", elapsed);
}
rightChoice = [self correctChoice:middleStatus :colorNum];
colorNum = [self randomizeNum:middle];
}
答案 0 :(得分:2)
两件事之一脱颖而出
NSTimer
异步运行 - 这里很理想。所以让我们get to grips with NSTimer(或者你可以使用GCD并将队列保存到ivar,但NSTimer似乎是正确的方法)。
制作名为timer _的ivar:
// Top of the .m file or in the .h
@interface ViewController () {
NSTimer *timer_;
}
@end
制作一些启动和停止功能。你怎么称呼这些取决于你。
- (void)startTimer {
// If there's an existing timer, let's cancel it
if (timer_)
[timer_ invalidate];
// Start the timer
timer_ = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(onTimerFinish:)
userInfo:nil
repeats:NO];
}
- (void)onTimerFinish:(id)sender {
NSLog(@"Timer finished!");
// Clean up the timer
[timer_ invalidate];
timer_ = nil;
}
- (void)stopTimer {
if (!timer_)
return;
// Clean up the timer
[timer_ invalidate];
timer_ = nil;
}
现在
希望这有帮助!