iPhone/iOS自定义控件

2024-04-02

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

我已经看到了 Three20 库,以及 Tapku 和 Touch Customs,它们对于专门的 iOS 控件(例如表格视图等)非常有用,但我在这里讨论的是制作完全自定义的交互式控件。

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

我该从哪里开始呢?

  • 我会继承 UIView 并自定义它吗?
  • 我会使用石英 2d 吗?
  • 我会使用 OpenGL ES 在屏幕上绘制这样的东西吗?
  • 我仍然可以使用 IB 来设计/布局我的自定义视图吗?

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

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


子类化什么代替UIView你可能想要子类化UIControl。此类具有目标/操作模式构建的功能,您可以使用该功能来响应自定义控件生成的操作。 UIKit 上的大多数元素(例如按钮和滑块)都继承自UIControl由于这个具体原因。

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

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

为了说明:例如,如果我的控件只需要在按下时更改,例如,我使用了图像:只需交换图像。我也喜欢用CALayer很多,它为您提供了生成边框、蒙版、渐变和圆角半径的简单方法,所有这些都可以轻松制作动画。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone/iOS自定义控件 的相关文章

  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • ui 测试 xcode,如何使用 cellquery 点击表视图单元格按钮

    我目前正在为我的应用程序进行 ui 测试 并一直点击我的应用程序的登录按钮 我无法找到我提供了标识符注册按钮的元素 该元素是索引中的第三个 这不是问题 let cellQuery self app tables cells element
  • IOS7 状态栏在选定控制器上隐藏/显示

    我想在某些控制器上显示和隐藏状态栏 这可以完成吗 或者它更像是一个整体应用程序设置 我看过很多关于 plist 更新的帖子 问题 View controller based status bar appearance NO 如果这完成了 那
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 相当于 Interface Builder 中 UIButton 的动态类型“自动调整字体”设置?

    UILabel 有一个Dynamic Type Automatically Adjusts FontInterface Builder 属性检查器中的复选框 Interface Builder 中是否有等效项用于自动调整 UIButton
  • iOS:Swift - 如何在触摸时向地图添加精确定位并获取该位置的详细地址?

    我想在 iOS 地图的触摸上添加注释并获取各个位置的详细地址 地标 我如何在 Swift 中实现这一目标 提前致谢 要对地图上的触摸做出反应 您需要为地图视图设置点击识别器 in viewDidLoad let gestureRecogni
  • Xcode 无法找到 strip-frameworks.sh 目录

    我最近将 Xcode 更新到版本 7 1 其中包括 Swift 2 1 我安装了 Swift 2 1 没有遇到任何问题 在尝试运行我的项目后 我意识到我需要获取最新版本的 Realm 因为之前的版本不支持 Swift 2 1 我删除了旧框架
  • Objective-C中如何使继承的类能够看到父类的隐藏方法[重复]

    这个问题在这里已经有答案了 我有两个类 Class1 和 Class2 第二个类继承自第一个类 我需要重写 Class1 的 update 方法来实现我的目标 继承方法中 update方法的改变是在代码中间进行的 所以我不能使用 超级更新
  • iphone:在 UIWebView 之上查看?

    我正在开发一个浏览器应用程序 并且 UIWebView 顶部有一个地址栏 在 MobileSafari 上 如果向下滚动 地址栏开始移动到顶部 移出屏幕 并且 UIWebView 不会滚动 只有当地址栏完全消失时 它才开始滚动 我也想在我的
  • React Native:不透明视图内的透明视图

    我想用不透明框架和透明中心显示相机的视图 就像图片中的一样 黑色部分是相机的视图 我正在寻找具有纯反应本机组件的解决方案 没有额外的库 例如https github com gilbox react native masked view h
  • 将子视图控制器的视图添加到父视图控制器的子视图

    我想添加一个表视图控制器作为容器视图控制器的子视图控制器 如下所示 根据苹果公司的查看控制器编程指南 http developer apple com library ios featuredarticles ViewControllerP
  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • 尝试复制文件时出错

    我正在尝试使用 NSFileManager 将临时文件复制到另一个位置 但是它失败并抱怨其中一个文件不存在 Copy temp file NSError error BOOL exists fileManager fileExistsAtP
  • iCloud loadFrom Contents - 如何处理 UIDocumentStateSavingError 和 UIDocumentStateEditingDisabled

    我在我的应用程序中使用 iCloud 来加载文本文件 加载文本文件时 当我调用时 iCloud 会调用此方法 UIDocument openWithCompletionHandler BOOL success etc BOOL loadFr
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • 图像目录中矢量 pdf 的渲染模式设置为模板,但 UIImageView 不会在自定义单元格中对图像进行着色

    我已将所有图像文件迁移到资产目录中 它们都是大小为 1x 的 pdf 向量 它们被设置为呈现为模板 它们的大小和颜色在任何地方都表现得很好 但是有一个来自 xib 的自定义 TableView Cell 我有 6 个 UIImageView
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定

随机推荐

  • 在没有 NSNotificationCenter 的情况下,在 iOS 8 中正确强制或允许 Youtube 嵌入视频的横向模式

    我在捕获 YouTube 播放器在 iOS 8 中进入全屏或退出全屏时遇到问题 因为这些通知已被删除UIMoviePlayerControllerDidEnterFullscreenNotification and UIMoviePlaye
  • 在Python中提取文件路径(目录)的一部分

    我需要提取某个路径的父目录的名称 它看起来是这样的 C stuff directory i need subdir file jpg 我想提取directory i need import os first file in current
  • ASP .NET Core 2 MVC 错误 NU1202 在 VS 2017 和 NET CLI 上创建项目

    我已经安装了 VS2017 15 3 0 和 NET Core 2 0 并在 VS 2017 上创建了默认的 Web MVC 应用程序 但出现以下错误 错误 NU1202 软件包 System Threading Overlapped 4
  • 具有 1 亿个节点的图中的连接组件

    我正在尝试获取具有 1 亿个节点的图中的连接组件列表 对于较小的图 我通常使用连接组件 http networkx lanl gov reference generated networkx algorithms components co
  • 在Android应用程序中读取本地压缩XML文件(gzip)

    我不知道如何获得InputStream 读取gzip压缩的本地xml文件 从本地存储gzip xml file 员工 gz 如果有人可以帮助我真的很感激 谢谢 此链接适用于 zip http techdroid kbeanie com 20
  • Visual Studio 构建工具 2017 中缺少 vs_buildtools.exe

    I 已安装 https www visualstudio com downloads 使用链接 位于底部的 其他工具和框架 下 安装 Visual Studio 构建工具 2017 安装两个工作负载 Visual C 构建工具和 Web 开
  • Google Sheet 根据单元格值进行保护

    我在一个 google 工作表文件中有大约 30 个选项卡 所有这些选项卡都具有相同的结构但数据不同 我想要一个根据值锁定 保护 整个工作表的脚本 该值被定义为范围 如果该值是 已审核 我想锁定选项卡 单元格位置 A5 单元格值 已审核 f
  • 如何在 Flex 中使用两个表达式(case)编写内联条件语句?

    我如何用两个表达式 case 在Flex中编写内联条件语句 like text expression expression2 true false Flex编译器只检查第一个表达式并代表给出结果 但我想检查语句并显示结果 如果不满足任何条件
  • 如何在多线程应用程序中使用 StackExchange.Redis IDatabase 对象?

    我从 StackExchange Redis 文档中收到有关如何使用 IDatabase 的混合消息 在里面基本使用文档 https github com StackExchange StackExchange Redis blob mas
  • SQL Group By - 从单列生成多个聚合列

    我想按公司和日期进行分组 并为 2 个单独的值 Flag Y 和 Flag N 生成计数列 输入表如下所示 Company Date Flag 001 201201 Y 001 201201 N 001 201202 N 001 20120
  • 使用 Paypal IPN 订阅

    我正在使用 Paypal IPN 添加订阅到网站 效果非常好 我可以成功创建新订阅并验证它 该订阅有两周的免费试用期 不幸的是 该指南对订阅状态的描述有点含糊 目前 一旦收到 subscr signup 或 subscr payment 用
  • 什么会导致 Java 在 System.exit() 之后继续运行?

    我有一个 Java 程序 正在通过以下方式启动ProcessBuilder来自另一个 Java 程序 System exit 0 是从子程序调用的 但对于我们的一些用户 在 Windows 上 java exe与子进程关联的进程不会终止 子
  • Visual Studio 2015 项目缺少所有引用

    从今天开始 一个属于有20个项目的解决方案的WPF项目 将我的所有引用设置为缺失 我刚刚检查了 MS 的建议和 Stackoverflow 上的其他答案 但没有一个起作用 我尝试从 SVN 重新获取解决方案 但没有运气 其他同事没有遇到这个
  • 如何修复:致命异常:main android.os.NetworkOnMainThreadException [重复]

    这个问题在这里已经有答案了 我在 android 版本 18 上运行我的代码时遇到问题 我已经使用了 AsyncTask 但仍然收到错误 请帮助 我是编程新手 所以请原谅我的错误 package com example androidhiv
  • 提取 git 提交中更改的所有文件

    我需要为某人制作一个补丁 他们没有使用 git 由提交更改的文件的 zip 我想像 git archive format zip commitguid gt myfiles zip 但这会提取整个内容 而不仅仅是更改的文件 有什么办法可以做
  • 如何使用 Cocoa UI 制作 Java 应用程序?

    我必须在项目中使用 Java API 但由于我不喜欢 Java UI 并且我有一台 Mac 所以我想围绕 Java 代码构建一个本机 Cocoa 应用程序 我知道 Xcode 曾经为此类事情提供直接支持 但由于它不再提供 那么最好的方法是什
  • 在android webview中全屏播放HTML5视频

    好吧 我已经搜索了几天了 如何在 android WebView 上以全屏模式显示 HTML5 视频 我设法在我的网络视图上播放 HTML5 视频 以全屏模式显示视频时会出现问题 正如我所发现的 android 有两种处理 标签的方法 在
  • 将 Canvas 内容导出为 PDF

    我正在使用 HTML5 Canvas 做一些事情 一切都工作得很好 除了现在 我可以使用 Canvas2image 将画布内容导出为 PNG 但我想将其导出为 PDF 我做了一些研究 我很确定这是可能的 但我似乎无法理解我需要在代码中更改什
  • 网络共享的锁定行为有所不同

    我一直在尝试锁定文件 以便其他克隆服务无法访问该文件 然后我读取该文件 完成后移动该文件 通过使用允许移动FileShare Delete 然而 在后来的测试中 我们发现如果我们正在查看网络共享 则这种方法不起作用 我知道我的方法可能不是最
  • iPhone/iOS自定义控件

    我想知道如何从头开始创建自定义 iPhone 控件 或者使用现有的库或框架 我已经看到了 Three20 库 以及 Tapku 和 Touch Customs 它们对于专门的 iOS 控件 例如表格视图等 非常有用 但我在这里讨论的是制作完