我编写了一些代码,可以按顺序在屏幕上移动一些对象。随着每个对象完成移动,下一个开始。
代码的结构与此类似:
模型:
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 中是否已经有代码来处理这个问题?似乎这将是一个足够普遍的问题,以至于会有一个标准的方法来处理它。
或者,是否有更好的方法在运行时处理构建动画链?(与使用完成块简单地对它们进行硬编码相反。)