1

MVC/OOP 设计模式说您不设置属性,本质上,您要求对象设置属性。同样,在 Cocoa 中,您不会告诉对象何时绘制自己。您的对象的代码详细说明了它是如何绘制自己的,因此我们相信框架可以决定(在大多数情况下)它应该何时绘制

但是,当谈到 Cocoa 中的动画(特别是 Cocoa-Touch)时,似乎我们现在必须控制对象何时从对象视图控制器中绘制自身。我不能向 UIView 子类发送消息,要求它更改一些值,然后让它知道它会慢慢地(持续时间 = X)根据属性更改将自己动画到一个新的位置、alpha、旋转等。或者我可以吗?

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

我的视图控制器中有很多动画块,而视图对象中没有... . 我没有比 Cocoa-Touch 中的 UIView 动画走得更远,所以也许这是我的问题,是时候深入挖掘了?!?

4

1 回答 1

0

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

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

我在这里使用典型的 Cocoa 意义上的“MVC”。您说得对,这在 SmallTalk 程序中可能不合适,但是SmallTalk 控制器的作用要有限得多(管理用户输入事件)。Cocoa 显着扩展了控制器在 MVC 中的作用,我认为这是一种改进,即使这意味着现在有一些功能可以进入控制器或视图(这是其中之一)。

于 2009-07-15T02:44:16.593 回答