iPhone/iOS 自定义控件

标签 iphone ios opengl-es custom-controls

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

我看过 three20 库,以及 tapku 和 touch customs,它们非常适合专门的 iOS 控件,例如 TableView 等,但我在这里谈论的是制作完全自定义的交互式控件。

假设我想制作一个类似于此应用程序中的拨号控件:http://store.apple.com/us/product/H2654LL/A .

我从哪里开始?

  • 我会继承 UIView 并自定义它吗?
  • 我会使用 quartz 2d 吗?
  • 我会使用 OpenGL ES 在屏幕上绘制这样的东西吗?
  • 我还能使用 IB 来设计/布局我的自定义 View 吗?

我只是有点困惑该走哪条路。

是的 - 这个问题之前已经被问过和回答过几次,但我还没有找到解决上述问题的令人满意的答案。

最佳答案

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

可视化您的子类 绘图实际上取决于您想要实现的目标以及您想要制作动画的部分。您可以根据需要或偏好使用图像、 quartz 或 OpenGL 进行绘制。只需使用该技术以最简单的方式达到所需的效果。多个图像可用于处理不同的状态(按下等)或用于 Sprite 动画。 CALayers 很容易旋转或移动。

无论您使用什么技术,您都可能会使用传入的触摸事件来控制动画。例如,如果是拨盘控件,您可以根据 y 坐标移动来控制旋转量。

举例说明:例如,如果我的控件只需要在按下时更改,我就使用了图像:只需交换图像。我还喜欢经常使用 CALayer,它可以让您轻松生成边框、蒙版、渐变和圆角半径,所有这些都可以轻松制作动画。

在 Interface Builder 中使用 使用桌面上的 Cocoa,可以为自定义控件构建自定义 IB 调色板。 iOS 从来没有这个功能,我不认为 IB 插件可用于 Xcode 4。

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

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

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

关于iPhone/iOS 自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874172/

相关文章:

ios - 为什么 NSNumber 从一个函数到另一个函数变成零?

iphone - 如何使用重力矢量正确变换增强现实场景?

javascript - Three.js作为网站背景可以吗?

iphone - 无法连接自定义 UITableViewCell 的 IBOutlet

iphone - Apple 推送通知服务 - 发送许多通知

ios - 有什么方法可以从 Apple Watch 访问加速度计吗?

iphone - Apple 的 iPhone OpenGLES 2.0 模板项目中的投影矩阵

iphone - 在 objective-c 中生成唯一的随机数?

iphone - iOS推送后释放

iOS8扩展后台NSURLSession沙盒报错