使Cocoa动画成为MVC / OOP模式

时间:2009-07-15 00:14:14

标签: cocoa-touch animation uiview uiviewcontroller

MVC / OOP设计模式表示你没有设置属性本身就要求对象设置属性。类似地,在Cocoa中,您不会告诉对象何时绘制自己。你的对象的代码详细说明它将如何绘制自己,所以我们相信框架可以决定何时应该绘制(大部分)。

但是,当谈到Cocoa中的动画(特别是Cocoa-Touch)时,我们现在必须控制对象从对象视图控制器中绘制自己时。我无法向UIView子类发送消息,要求它更改某个值,然后不知道它会慢慢地(持续时间= X)动画本身到新位置,alpha,旋转等。取决于房产的变化。或者我可以吗?

基本上,我正在寻找一种方法来设置房产,然后走开。相反,似乎,我需要包装调用对象的代码,要求它使用某种类型的动画块来更改其属性“[UIView beginAnimations:nil context:NULL]; ... [UIView commitAnimations];”

我的视图控制器中有很多很多动画块,而我的视图对象中没有动画块...我想我只是想找人来验证这是怎么做的我就是不要忽视什么。我没有比Cocoa-Touch中的UIView动画更远,所以也许这是我的问题,是时候深入挖掘了?!?

1 个答案:

答案 0 :(得分:0)

你是正确的,UIView没有像CALayer那样默认动画其属性更改,但我不认为这表明MVC中断了。 Controller适合于指示View应如何转换。这就是Controller类的作用,因为它适合于控制器知道View的正确框架甚至管理布局。我同意你在UIView类而不是实例上调用-beginAnimations:context:有点奇怪,但实际上它实际上确实工作得更好,因为你可能想要在一起制作许多视图。

也就是说,如果你有一个UIView子类来管理其子视图的布局,那么允许UIView管理动画而不是依赖UIViewController来完成它就没有错。所以这可以去任何一个地方,但实际上它通常会在你发现的控制器中进行。

我在典型的可可意义上使用“MVC”。你是正确的,这在SmallTalk程序中可能不合适,但SmallTalk Controllers具有更有限的作用(管理用户输入事件)。 Cocoa显着扩展了控制器在MVC中的作用,我认为这是一种改进,即使它意味着现在有一些功能可以在Controller或View中进行(这是其中之一)。