iPhone/iOS自定义控件

iPhone/iOS自定义控件,iphone,ios,opengl-es,custom-controls,Iphone,Ios,Opengl Es,Custom Controls,我想知道如何从头开始创建自定义iPhone控件,或者使用现有的库或框架 我已经看过three20库,以及tapku和touch customs,它们对于专业的iOS控件(如table view等)很好,但我在这里谈论的是完全定制的交互式控件 假设我想制作一个类似于此应用程序中的拨号控件: 我从哪里开始 我会将UIView子类化并自定义它吗 我会使用石英2d吗 我会使用OpenGL ES在屏幕上绘制类似的东西吗 我仍然可以使用IB设计/布局我的自定义视图吗 我只是有点不知道该走哪条路 是-这个

我想知道如何从头开始创建自定义iPhone控件,或者使用现有的库或框架

我已经看过three20库,以及tapku和touch customs,它们对于专业的iOS控件(如table view等)很好,但我在这里谈论的是完全定制的交互式控件

假设我想制作一个类似于此应用程序中的拨号控件:

我从哪里开始

  • 我会将UIView子类化并自定义它吗
  • 我会使用石英2d吗
  • 我会使用OpenGL ES在屏幕上绘制类似的东西吗
  • 我仍然可以使用IB设计/布局我的自定义视图吗
我只是有点不知道该走哪条路


是-这个问题已经被问过几次了,但我还没有找到一个满意的答案来解决上述问题。

子类化什么 您可能希望子类化
UIControl
,而不是
UIView
。此类具有目标/操作模式生成的功能,您可以在其中响应自定义控件生成的操作。出于此特定原因,UIKit上的大多数元素(如按钮和滑块)继承自
UIControl

可视化子类 绘图实际上取决于您想要实现什么以及您想要设置动画的部分。您可以使用图像,使用quartz或OpenGL绘制,具体取决于您的需要或喜好。只需使用最简单的方法来实现所需的效果。多个图像可用于处理不同的状态(按下等),或用于精灵动画。Calayer很容易旋转或移动

无论使用何种技术,都可能使用传入的触摸事件来控制动画。例如,在使用刻度盘控件的情况下,您可以根据y坐标移动来控制旋转量

举例说明:例如,如果我的控件只需要在按下时更改,我就使用了图像。例如:只需交换图像。我还喜欢大量使用
CALayer
,它为您提供了生成边界、遮罩、渐变和角半径的简单方法,所有这些都很容易设置动画

在界面生成器中使用 通过桌面上的Cocoa,可以为自定义控件构建自定义IB选项板。iOS从来没有这个功能,我也不认为IB插件可以用于Xcode 4

因此,当前处理自定义子类的唯一方法是在IB中使用
UIView
,并将Identity Inspector中的“custom class”字段设置为自定义类的名称。通过这种方式,您可以查看布局和大小。在Interface Builder中,它只是一个矩形,当运行应用程序时,XIB实际上会将该视图反序列化为自定义类

当使用
UIControl
时,您可以免费获得目标/动作机制。因此,您可以将触摸事件连接到IB中的任何对象,就像使用任何其他标准UIKit控件一样


需要注意的一点是:如果您有自定义的
-initWith….:
选择器,则不会调用这些选择器。您的类是从XIB反序列化的,因此您应该使用
-initWithCoder:(NSCoder*)aDecoder作为初始化

上的自定义控件也很少。它们是开源的,因此您可以下载源代码并使用它们。

这是一个很好的教程