Ios 如何在MVC设计中干净地处理顺序动画?
我写了一些代码,可以在屏幕上按顺序移动一些对象。当每个对象完成移动时,下一个对象开始移动 代码的结构与此类似: 型号:Ios 如何在MVC设计中干净地处理顺序动画?,ios,animation,uiview,uikit,uiviewanimation,Ios,Animation,Uiview,Uikit,Uiviewanimation,我写了一些代码,可以在屏幕上按顺序移动一些对象。当每个对象完成移动时,下一个对象开始移动 代码的结构与此类似: 型号: moveObject { // Code to move the object ... [delegate moved:self]; } 代表(控制员): 除了这一事实之外,它在我看来在概念上并不正确。模型中的逻辑应该可以自由地进行移动,而不必等待控制器提示视图准备好进行更多更新 我的计划是创建一个需要动画的挂起操作队列,每次模型更新需要动画的内容时
moveObject
{
// Code to move the object
...
[delegate moved:self];
}
代表(控制员):
除了这一事实之外,它在我看来在概念上并不正确。模型中的逻辑应该可以自由地进行移动,而不必等待控制器提示视图准备好进行更多更新
我的计划是创建一个需要动画的挂起操作队列,每次模型更新需要动画的内容时,只需将其添加到队列中并让其继续。然后我可以从队列中取出动作,一次一个地设置动画
这也意味着我可以在没有任何视图的情况下使用模型,而不必编写一个单独的控制器,当对象移动时,该控制器会不断地调用模型
所以,在我开始为这个问题开发自己的解决方案之前,苹果的API中是否已经有了处理这个问题的代码?似乎这将是一个足够普遍的问题,有一个标准的方法来处理它
或者,是否有更好的方法来处理在运行时构建动画链?(而不是简单地使用完成块对它们进行硬编码。)我的印象是,您的视图控制器应该注意这一点。它应该知道哪些属性需要设置动画以及动画的外观。也许可以使用KVO观察相关的模型更改。关于队列,我没有任何评论:)你可以看看我和邓肯对它们的回答,它们是链接动画的两种不同方式,使它们顺序排列。这两个都是很好的答案。@DavidRönnqvist谢谢,你的答案正是我打算做的事情。我要试一试。
moved:(MyClass *)o
{
UIView* v = [self viewForObject:o];
[UIView animateWithDuration:1.0
animations:^{
[v setCenter: [model center]];
}
completion:^(BOOL finished){
// Move object
[model moveObject];
}];
}