在很多情况下,您只是重新排列文本,并使用一些内置按钮、标签等;不需要子类 aUIView
而是可以通过 a 以编程方式完成UIViewController
或添加到故事板/nib 文件中。但是,一个很好的例子说明何时以及为什么要对 a 进行子类化UIView
是,如果您想向正在使用的视图添加一些自定义触摸行为或绘图。
所以在我看来,子类化 a 的主要考虑因素UIView
如下:
1)触摸交互,
2) 自定义绘图
*请注意,可能还有其他原因,您可能希望仅从程序组织的角度创建视图子类,但这是不能将行为委托给另一个函数或直接添加到UIView
. 例如,对一般动画和背景图像操作的支持都可以在没有子类化的情况下处理UIView
。
触摸交互- 与 a 的触摸交互UIView
可以通过几种不同的方式进行处理,您可以直接与触摸事件交互,或者将手势识别器添加到UIView
. 在许多情况下,您可以通过手势识别器(或自定义手势识别器)完成所需的一切,而不是尝试查看视图上发生的单个触摸,但如果您想要/需要访问原始触摸事件,您将覆盖以下函数以实现所需的行为:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
自定义绘图-UIView
您可以通过 Quartz/Core Graphics 进行基本的 2D 绘图。一个例子是,如果您正在做一个绘图应用程序,并希望您UIView
在熨平板上的上下文中为您绘制实际线条。为此,您将覆盖该drawRect:(CGRect)rect
函数并在此处列出任何自定义绘图。
话虽如此,这绝不是您可以绘制线条的唯一方法,并且可以在不执行自定义绘图的情况下完成此任务。例如,同一条线或一组线可以由您的 绘制到图像缓冲区中UIViewController
,然后相应地显示为您的视图或子视图的背景。然而,当这样做时,UIView
屏幕上的线条会丢失,直接与该线条的触摸交互变得更具挑战性。最后,请记住,有一些创造性的方法可以绕过子类化以显示自定义绘图,但有时从程序设计的角度来看,创建子类可能更有意义UIView
。
这些绝不是您想要将 a 子类化的唯一原因UIView
,但却是我所见过的用于创建 的子类的两个最大原因UIView
。我建议您查看UIView 类参考或iOS 的 View Programming Guide了解更多详细信息。