如何在if语句中检查方法是否正在运行?例如 -
if ([(UIButton *)sender isEqual:blueButton] && **showBlueText method is running** )
{
Keep playing.
}
else if ([(UIButton *)sender isEqual:blueButton] && **showBlueText method is NOT running** )
{
Game over.
}
-(void)showBlueText
{
blueText.hidden = NO;
[self performSelector:@selector(hideText) withObject:nil afterDelay:textDelay];
[self performSelector:@selector(showGreenText) withObject:nil afterDelay:hideDelay];
}
只是为了澄清,'showBlueText'是它自己的循环的一部分,它独立于这个if语句运行。我只想检查showBlueText当前是否正在运行。
答案 0 :(得分:0)
我建议用Keep playing
语句替换Game over
或Doing stuff
或NSLog()
。如果我得到意想不到的结果,我总是用它来跟踪程序的变化。
所以你的陈述可能如下:
NSLog(@"Keep playing");
我希望这会有所帮助。
答案 1 :(得分:0)
你想在这里记录状态。在这个类中创建一个新的实例变量。
// new iVar
BOOL textIsShowing;
// method
-(void)showBlueText {
textIsShowing = YES;
blueText.hidden = NO;
[self performSelector:@selector(hideText) withObject:nil afterDelay:textDelay];
}
// method
- (void)hideText {
textIsShowing = NO;
blueText.hidden = YES;
}
// button press
- (void)buttonPressed {
if (textIsShowing) {
NSLog(@"Keep playing");
} else {
NSLog(@"Game over");
}
}
在您调用此方法和动画停止之间,不要将其视为“正在运行”。它会安排稍后执行的代码。相反,您希望在最终运行后得到通知。
在这种情况下,最容易自己跟踪状态。使用新变量来跟踪事物的状态,并在状态发生变化时更改它的值。
但你不能只检查if (blueText.hidden)
吗?是的,你可以。但是,将一个关于你的程序的状态存储在随机不重要的对象的一些模糊属性中是不好的做法。
检查你的状态以找出你所展示的内容。不要检查显示你的状态的东西。
答案 2 :(得分:0)
只检查文字是否隐藏。无需在控制器中存储并行状态 - 所有这一切都可能导致它们不同步。