iPhone / iOS自定义控件

我想知道如何从头创build一个自定义的iPhone控件,或使用现有的库或框架。

我已经看到了three20图书馆,以及tapku和触摸习惯,这是专业的iOS控制,如表视图等不错,但我在这里谈论完全自定义,交互式控制。

比方说,我想做一个类似于这个应用程序的拨号控制: http : //store.apple.com/us/product/H2654LL/A 。

我从哪里开始?

  • 我会inheritanceUIView并定制它吗?
  • 我会用石英2d吗?
  • 我会用OpenGL ES来画这样的东西到屏幕上吗?
  • 我仍然可以使用IB来devise/布置我的自定义视图吗?

我只是有点困惑到哪里去这里。

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

什么是子类而不是UIView你可能想要UIControl 。 该类具有Target / Action模式构build的function,您可以使用它来响应由您的自定义控件生成的操作。 UIKit上的大多数元素(如button和滑块)都是从UIControlinheritance的。

可视化你的子类图画真的取决于你想要做什么以及你想要做什么animation。 你可以使用图像,使用石英或OpenGL绘制取决于你需要什么或你喜欢什么。 只要用最简单的方法就可以达到预期的效果。 可以使用多个图像来处理不同的状态(按下等)或用于精灵animation。 CALayers很容易旋转或移动。

无论您使用哪种技术,您都可能使用传入触摸事件来控制animation。 在拨号控制的情况下,您可以根据y坐标移动来控制旋转量。

举例说明:例如,如果我的控件只是在按下时才需要更改,则可以使用图像:只需交换图像即可。 我也很喜欢使用CALayer ,它可以让你轻松地生成边框,蒙版,渐变和圆angular半径,所有的animation也都很容易。

在界面生成器中使用在桌面上使用Cocoa可以为自定义控件构build自定义的IB调色板。 iOS从来没有这个function,我不知道IB插件可用于Xcode 4。

因此,目前处理自定义子类的唯一方法是在IB中使用UIView ,并将Identity Inspector中的“Custom class”字段设置为自定义类的名称。 这样你有一个看法,你可以布局和大小。 在界面生成器中,它只是一个矩形,运行你的应用程序时,XIB将实际将该视图反序列化到你的自定义类。

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

有一件事要注意:如果你有自定义- initWith....:select器,那些将不会被调用。 你的类是从XIB反序列化的,所以你应该使用- initWithCoder:(NSCoder *)aDecoder; 作为初始化。

此外, http://www.cocoacontrols.com/platforms/ios/controls上的自定义控件也很less。 他们是开源的,因此你可以下载源代码并与之一起玩。