我有这段代码:
centerLevelLabel.string=@"New level";
centerLevelLabel.visible=true;
[centerLevelLabel runAction:[CCFadeOut actionWithDuration:1]];
while (centerLevelLabel.numberOfRunningActions>0) {
}
centerLevelLabel.string=@"3";
while (centerLevelLabel.numberOfRunningActions>0) {
}
centerLevelLabel.string=@"2";
while (centerLevelLabel.numberOfRunningActions>0) {
}
centerLevelLabel.string=@"1";
while (centerLevelLabel.numberOfRunningActions>0) {
}
//一些代码吼叫
我想显示此标签,然后我需要继续下面的代码。问题是,UI是冻结的,并且在块运行无限循环时。但我不知道为什么,因为当运行动作完成后,numberOfRunningActions为零。
还有其他方法,我怎么能等待运行结束然后继续?
谢谢
答案 0 :(得分:2)
这将永远是一个无限循环:
while (centerLevelLabel.numberOfRunningActions > 0)
{
}
这与写作类似:
while (value > 0)
{
}
对于while循环运行的时间,线程被阻塞。因此,不会运行任何其他代码来更新操作数,或者可能更改值的值。
答案 1 :(得分:2)
您可以使用CCSequence序列化操作,并在原始操作完成后添加CCCallFuncN以执行某些代码。
id action1 = [CCFadeOut actionWithDuration:1];
id action2 = [CCCallFuncN actionWithTarget:self selector:@selector(finishedRunning)];
id sequenceActions = [CCSequence actions:action1, action2, nil]];
[centerLevelLabel runAction:sequenceActions];
...
-(void) finishedRunning {
// Do stuff after action finishes
}