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自定义控件 的相关文章

  • 无法连接到 iTunes Store(获取应用内购买列表)

    我正在尝试从我的应用程序的应用程序内购买项目商店中获取列表 这是我所做的 安装了新的配置文件并启用了应用内购买 替换配置文件很棘手 但我认为我的设置是正确的 验证税务和银行信息是否正常 该应用程序已在商店出售 创建测试用户 在测试设备上以测
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • AppStore 提交:错误 ITMS-9000:“无效的捆绑结构 - 不允许二进制文件‘MyApp.app/BuildAgent’

    我陷入了以下错误 我根本不明白 错误 ITMS 9000 无效的捆绑结构 不允许使用二进制文件 MyApp app BuildAgent 您的应用程序可能只包含一个可执行文件 当我使用 Xcode 从 Archive 导出到 IPA 时 我
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • 如何制作带有 SWIFT 图像的弹出窗口

    我想知道如何制作类似于此示例的弹出窗口 原始窗口充满了按钮 选择这些按钮后将拉出我想要使用的图像 我会简单地创建一个可重用的UIView组件以及作为子视图所需的一切 例如UIImageView为了你的形象 UILabel or a UIBu
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 将图像保存在相机胶卷中并获取资源 URL

    对于我正在开发的应用程序 我使用 UIImagePickerController 拍摄照片并将其存储在相机胶卷中 void imagePickerController UIImagePickerController picker didFi
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • 直接在 XCode 中编译 Arm Assembly

    将arm汇编代码编译成xcode的最佳方法是什么 我有生成的那些程序集文件 有没有办法可以将 s 文件直接包含到我拥有的 C 代码中 或者我需要先运行一个预处理器 它将生成 o 文件 我可以将其与我的文件链接 如果是这样的话 在 XCode
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • UIView animateWithDuration:delay: 工作很奇怪

    我在使用 iPhone 动画块时遇到了一个奇怪的问题 这段代码 UIView animateWithDuration 2 delay 0 options 0 animations void controller setBackgroundC
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 接收者'ClassName'是一个转发类,对应的@interface可能不存在

    我目前正在寻找一个UIPickerTable在 UIPickerView subviews 内 所以我循环并执行isKindOfClass UIPickerTable class 它有效 但由于 UIPickerTable 的标头未公开 我
  • 从应用程序启动 iPhone 设置屏幕?

    我正在开发一个应用程序 我希望按下按钮时 iPhone 设置屏幕应该打开 苹果有访问限制吗 到底能不能 如果能的话怎么办 不 你不能那样做 但是 作为替代方案 您可以使用这个框架 http www inappsettingskit com
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se

随机推荐

  • 在没有 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 控件 例如表格视图等 非常有用 但我在这里讨论的是制作完