我编写了一些代码,可以按顺序在屏幕上移动一些对象。随着每个对象完成移动,下一个开始。
代码的结构与此类似:
模型:
moveObject
{
// Code to move the object
...
[delegate moved:self];
}
代表:
moved:(MyClass *)o
{
UIView* v = [self viewForObject:o];
[UIView animateWithDuration:1.0
animations:^{
[v setCenter: [model center]];
}
completion:^(BOOL finished){
// Move object
[model moveObject];
}];
}
尽管代码看起来运行良好,但屏幕上发生的情况是动画被分组为一批:大量的同时发生,然后另一组开始。
如果我在该行上放置一个断点,那么它会在设置[model moveObject];
为时多次命中,而屏幕上不会显示任何动画。然后,偶尔会设置为,在我让调试继续之后,所有的动画都会在屏幕上执行。finished
true
finished
false
编辑:
但是,如果我将代码更改为在调用 moveObject 时偶尔不moved:
移动对象,而是不执行任何操作返回,并等待用户移动对象(并因此通过委托的选择器回调到此代码中),那么短动画串顺序发生。
即问题似乎只发生在代码处于无限循环中时。
怎么了?