3

我试图以最好的方式重构我的代码,我想知道给定情况的正确架构是什么。

我想做的事

我所做的非常简单:我有一些自定义CALayer子类,它们代表一个交互式 UI 元素。由于 UI 的某些部分是静态的,因此它们被分解为多个层,因此我不想不必要地重绘那些静态元素。现在,这些层作为子层添加到一个CustomView类的初始化部分,该类是UIView.

目前没有对应CustomViewController的类是的子类,UIViewController因为当我使用 时CustomView,它包含在UITableViewCell泛型的一个或一部分中,其中UIViewController包含其他视图,所以我觉得UIViewController每个CustomView实例的另一个是多余的。

同样重要的是,我在类中所做的唯一操作UIView是响应触摸事件并将触摸信息发送到子层,以便 UI 可以相应地更新其外观。我没有覆盖该drawRect方法或类似的东西。

问题

基本上,我试图弄清楚我是否应该:

选项1:

摆脱CustomView类,创建一个CustomViewController作为 的子类的类UIViewController,然后简单地将CALayer对象添加为CustomViewController的内置view属性的子层。

或者

选项 2:

我认为UIViewController子类是多余的是正确的,所以我应该保留它的方式,并有一个包含对象的CustomView类。CALayer

我非常感谢您对此提出任何建议。

4

1 回答 1

0

我认为就 MVC 而言,您所描述的代码(选项 #2)写得很好,并且保持了非常清晰的责任边界。您不会在此类中编写任何与视图层本身无关的代码,这很棒。我认为在这种情况下,不需要单独的UIViewController子类来管理这些实例,因为正如您所说 - 他们正在处理自己的触摸事件和可见层(正是他们的责任)。

如果出于任何原因需要更复杂的东西,需要与数据相关的逻辑或其他此类计算,我肯定会考虑将 a 子类化,UIViewController或者以完全不同的方式看待问题。

鉴于您提出的情况,我认为CALayer在这个UIView子类('CustomView')中维护实例是正确的方法。

于 2013-07-06T17:27:41.903 回答