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];
                     }];
}

除了这实际上不能正常工作之外,它在我看来在概念上并不正确。模型中的逻辑应该可以自由地进行移动,而不必等待控制器轻推,告诉它视图已准备好进行更多更新。

我的计划是创建一个待处理的动作-需要-动画的队列,每次模型更新需要动画的东西时,只需将其添加到队列中并让它继续。然后我可以从队列中取出动作,一次一个地为它们设置动画。

这也意味着我可以在没有任何视图的情况下使用模型,而无需编写一个单独的控制器,该控制器只是在移动对象时不断回调模型。

因此,在我开始为此开发自己的解决方案之前,Apple 的 API 中是否已经有代码来处理这个问题?似乎这将是一个足够普遍的问题,以至于会有一个标准的方法来处理它。

或者,是否有更好的方法在运行时处理构建动画链?(与使用完成块简单地对它们进行硬编码相反。)

4

0 回答 0