02-iOS 多媒体技术| 图形处理框架-UIKit要点回顾1【UITouch、UIEvent、手势处理、UIResponder、UIApplication等】
内容提要
本文介绍了iOS中UIApplication的创建和应用程序生命周期的处理方法,包括应用程序的初始化、进入前台和后台、终止等阶段的回调方法。还介绍了应用程序的操作方法,如打开其他应用程序、注册和接收远程通知、显示本地通知等。同时还介绍了应用程序的图标角标、状态栏控制、应用程序退出、应用程序间跳转等功能的使用方法。
延伸解读
UIKit 与 SwiftUI 的协作关系
文章指出 UIKit 可与 SwiftUI 无缝协作,开发者能在 SwiftUI 视图中嵌入 UIKit 视图和控制器,反之亦然。作者个人倾向于在灵动岛适配时使用 SwiftUI,而业务页面仍用 UIKit。这提示读者不必二选一,可根据场景混合使用,但需注意 UIKit 类必须在主线程或主队列中调用,尤其是派生自 UIResponder 的类。
手势与触摸事件的传递控制
文章详细解释了 UIGestureRecognizer 的 cancelsTouchesInView、delaysTouchesBegan 和 delaysTouchesEnded 三个属性对触摸事件传递的影响。默认情况下,手势识别成功后会取消触摸事件传递,但 delaysTouchesBegan 为 NO 时,触摸开始阶段仍会发送事件,导致 touchesMoved 可能被调用。理解这些属性有助于在同时使用手势和触摸回调时避免冲突。
响应者链与第一响应者的实际应用
UIResponder 是响应者链的基础,文章通过多个 Demo 展示了其用途:通过 nextResponder 查找视图控制器、设置第一响应者以接收远程控制事件、为 UILabel 添加长按菜单、使用 NSUndoManager 实现撤销重做、自定义快捷键和输入键盘。这些例子说明,掌握响应者链和第一响应者机制能解决许多交互定制需求,但需注意 UIView 默认不能成为第一响应者,需重写 canBecomeFirstResponder。
UIApplication 生命周期与启动流程
文章从 main 函数中的 UIApplicationMain 入手,解释了 UIApplication 单例的创建时机和应用程序启动过程:先创建 UIApplication 对象,再创建其代理并设置,然后开启主运行循环,最后加载 Info.plist 指定的界面。UIApplication 负责应用级操作,如打开其他应用、注册远程通知、控制图标角标等,其生命周期回调通过 UIApplicationDelegate 协议分发。理解这一流程有助于调试启动阶段的问题。
Q&A
UIApplication的主要功能是什么?
UIApplication负责管理应用程序的生命周期、事件处理和应用程序级操作。
如何创建UIApplication实例?
UIApplication实例在程序入口main函数中通过UIApplicationMain方法创建。
UITouch类的作用是什么?
UITouch类用于记录触控事件,包括接触的方位、尺寸、时间等信息。
UIEvent类记录哪些类型的事件?
UIEvent类记录触控事件、运动事件、远程控制事件和按压事件等多种类型。
UIGestureRecognizer的主要作用是什么?
UIGestureRecognizer简化了手势识别的开发,封装了手势的基本行为。
如何处理应用程序的生命周期回调?
应用程序的生命周期回调通过实现UIApplicationDelegate协议中的方法来处理。