iPhone / iOS 自定义控件

16
我想知道如何从头开始创建自定义iPhone控件,或者使用现有的库或框架。我已经看过了three20库、tapku和touch customs等专门用于iOS控件(例如表格视图)的库,但是我正在讨论制作完全自定义、交互式控件。
假设我想制作一个类似于这个应用程序中的拨号控件:http://store.apple.com/ us / product / H2654LL / A
我应该从哪里开始?
- 我需要子类化UIView并对其进行自定义吗? - 我需要使用Quartz 2D吗? - 我需要使用OpenGL ES来将此类内容绘制到屏幕上吗? - 我可以继续使用IB来设计/布局我的自定义视图吗?
我只是有点困惑应该怎么走。
是的 - 这个问题已经被问过并回答过几次了,但是我尚未找到令人满意的答案,可以解决上述问题。
2个回答

23

需要继承的类 与其继承UIView,您可能更希望继承UIControl。该类内置了Target/Action模式的功能,可用于响应您的自定义控件生成的操作。UIKit上的大多数元素(如按钮和滑块)都出于这个特定的原因而继承自UIControl

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

无论您使用哪种技术,您都可能使用传入的触摸事件来控制动画。例如,在拨号控件的情况下,您会基于y坐标移动来控制旋转量。

举例说明:例如,如果我的控件只需要在按下时更改,则使用图像进行交换。我也喜欢经常使用CALayer,它为您提供了生成边框、遮罩、渐变和圆角的简单方式,这些都可以轻松进行动画处理。

在Interface Builder中使用 在桌面上使用Cocoa时,可以为自定义控件构建自定义IB工具栏。iOS从未拥有过这种功能,而我认为Xcode 4没有可用的IB插件。

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

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

需要注意的一点是:如果你有自定义的 - initWith... 选择器,这些选择器将不会被调用。因为你的类是从XIB反序列化过来的,所以应该使用- initWithCoder:(NSCoder *)aDecoder; 进行初始化。


1

这是一个不错的教程:http://www.thinkandbuild.it/how-to-build-a-custom-control-in-ios/ - MatterGoal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接