0

我编写了一些代码,可以按顺序在屏幕上移动一些对象。随着每个对象完成移动,下一个开始。

代码的结构与此类似:

模型:

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];为时多次命中,而屏幕上不会显示任何动画。然后,偶尔会设置为,在我让调试继续之后,所有的动画都会在屏幕上执行。finishedtruefinishedfalse

编辑

但是,如果我将代码更改为在调用 moveObject 时偶尔moved:移动对象,而是不执行任何操作返回,并等待用户移动对象(并因此通过委托的选择器回调到此代码中),那么短动画串顺序发生。

即问题似乎只发生在代码处于无限循环中时。

怎么了?

4

0 回答 0