Ios 要对计时器对象使用UIView或UIViewController?

Ios 要对计时器对象使用UIView或UIViewController?,ios,uiview,uiviewcontroller,Ios,Uiview,Uiviewcontroller,我有一个包含多个元素的UI,其中一些元素我想封装到它们自己的对象中。例如,一个对象是计时器(基本上只是UIView中的UILabel),具有外部可用的成员: startTime(属性) 开始和暂停(方法) (当计时器达到0时,还会发出im_doneNSNotification。)此对象和其他几个对象将在单个UIViewController中一起使用 UIView或UIViewController是否更适合作为计时器对象(以及所有其他对象)的子类?阅读让我相信UIView,但对于我的具体情况(

我有一个包含多个元素的UI,其中一些元素我想封装到它们自己的对象中。例如,一个对象是计时器(基本上只是UIView中的UILabel),具有外部可用的成员:

  • startTime
    (属性)
  • 开始
    暂停
    (方法)
(当计时器达到0时,还会发出
im_done
NSNotification。)此对象和其他几个对象将在单个UIViewController中一起使用

UIView或UIViewController是否更适合作为计时器对象(以及所有其他对象)的子类?阅读让我相信UIView,但对于我的具体情况(尤其是对于更复杂的对象),我不确定。谢谢你的阅读


编辑:只是澄清一下,我希望实现计时器功能的所有代码都与我的主视图控制器分开。一个主要原因是计时器对象是可移植的

您应该有一个子类
UIView
,但它应该只有视图组件来显示您需要的任何时间信息。您还应该有一个
MyTimer
类,该类封装了计时功能,并提供了对更改的回调(例如剩余时间,或者在剩余时间为零时作为单独的完成时间)。理想情况下,回调传递
MyTimer
和剩余时间值(为了方便起见),因此您不需要在简单用例中使用accessor方法)


现在,您已经有了一个视图控制器来管理更广泛的视图,它可以创建并将您的
UIView
子类添加到主视图中,并创建、拥有和管理驱动这些视图的相关
MyTimer
实例。

我认为这可以归结为首选项。您将以不同的方式在父视图控制器中包含uiview和uiviewcontroller,如果您不理解容器,这种差异可能会使uiviewcontroller更加困难。我想说最好的实践是在uiviewcontroller中,但这实际上取决于您

我建议子类化UIView,而不是UIViewController。@Sean感谢您的评论。为了确保我理解,您是否建议将我的计时器(NSTimer对象等)的所有内部工作都放在这个UIView子类中?谢谢您的回复。这是否意味着
MyTimer
类本质上是一个视图控制器?不,不是一个视图控制器,只是一个控制器(一个分配了职责的普通对象)。它没有视图的概念,只是管理timeOK,因此负责更改计时器UILabel的代码将保留在我的主视图控制器中?您可以选择是否将其放入
MyTimer
提供的回调中,因此它直接更新视图子类中的标签,或者回调是否传递该值(或者只是将整个
MyTimer
实例作为视图模型)添加到视图中,这样它就可以更新自身。这两种方法都是非常有效的。更新中间视图模型类也是如此,尽管这可能有些过头了。。。。