UIKit 是苹果公司提供的 iOS 或 Apple tvOS App 所需的基础架构。它提供了用于实施界面的窗口和视图架构,用于向 App 提供多点触控和其他类型输入的事件处理基础架构,以及管理用户、系统和 App 之间互动所需的主运行循环。
该框架提供的其他功能包括动画支持、文档支持、绘图和打印支持、当前设备的相关信息、文本管理和显示、搜索支持、辅助功能支持、App 扩展支持和资源管理。
UIKit架构
UIKit 位于应用层的最高层,但与低层框架存在明确的分工:
UIKit:负责视图树、事件分发、动画 API、控制器生命周期。
Core Animation:负责图层树(CALayer)、合成与渲染。
Core Graphics:负责 CPU 端绘制(形状、文字、图片)。
UIKit 的大多数控件本质上是 CALayer 的包装。UIKit 操作视图树(UIView),Core Animation 操作图层树(CALayer),二者完全同步。
可以认为 UIKit 提供了“抽象接口”,而 Core Animation 是“真正渲染的 GPU 引擎”。
UIKit结构
代表整个应用程序的生命周期,由系统自动创建,不需要手动实例化。
通常在 AppDelegate 和 SceneDelegate 中配合使用,响应应用启动、进入后台、前台等状态。
2、UIWindow
视图层级的最顶层容器,每个 window 通常包含一个 rootViewController,多用于多场景(Scene)或外部显示器支持。
视图控制器,提供界面级别的生命周期管理:
viewDidLoad():视图加载完成。
viewWillAppear() / viewDidAppear():即将/已经显示。
viewWillDisappear() / viewDidDisappear():即将/已经隐藏。
可以被模态弹出 (present) 或放入导航栈中。
4、UIView
所有界面元素的基础类,矩形区域。可组合、嵌套、添加动画。
UIView拥有frame、bounds、transform,自动布局、事件响应,并承载CALayer(负责绘制)。
let redView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
redView.backgroundColor = .red
view.addSubview(redView)
事件处理与响应链
触摸事件发生时,UIWindow从根视图开始递归hitTest,判断是否包含触点,子视图逆序遍历,最后返回合适的视图。
当找到目标视图后,事件会沿着“响应链”(UIResponder → UIView → UIViewController → UIWindow → UIApplication → App Delegate)向上传递。
UIKit控件
1、界面控制器:UIViewController
2、视图元素:UIView、UILabel、UIButton、UIImageView
3、表格/列表:UITableView、UICollectionView
4、导航与结构:UINavigationController、UITabBarController
5、动画:UIView.animate(…)
6、触摸处理:UITapGestureRecognizer、UIPanGestureRecognizer
7、窗口管理:UIWindow、UIApplication
UIKit和SwiftUI区别
1、编程方式:UIKit基于命令式代码(Imperative),SwiftUI基于声明式代码(Declarative)。
2、生命周期:UIKit更负责,管理控制器堆栈,SwiftUI自动管理状态和界面。
3、学习曲线:UIKit更复杂,更底层,SwiftUI更简单、更现代化。
4、使用时间:UIKit自2008年至今,成熟稳定。SwiftUI从iOS 13+(2019年)起推出,仍在发展。
代码示例:
// UIKit 的按钮
let button = UIButton(type: .system)
button.setTitle("点击我", for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
view.addSubview(button)
// SwiftUI 的按钮
Button("点击我") {
print("按钮被点击")
}
总结
UIKit 是 iOS 上最经典、最成熟的 UI 框架,SwiftUI 是它的现代继任者。
如果需要开发 iOS 13+ 版本,推荐从SwiftUI开始学起,SwiftUI兼容macOS、WatchOS、小组件等系统。
还可以通过iOS App声明周期管理,了解UIKit各核心框架的管理内容。
相关文章
1、UIKit简体中文文档:https://developer.apple.com/cn/documentation/uikit/
2、iOS多用户界面场景UIWindowScene:https://fangjunyu.com/2025/05/21/ios%e5%a4%9a%e7%94%a8%e6%88%b7%e7%95%8c%e9%9d%a2%e5%9c%ba%e6%99%afuiwindowscene/
3、iOS支持多窗口的UIScene:https://fangjunyu.com/2025/05/21/ios%e6%94%af%e6%8c%81%e5%a4%9a%e7%aa%97%e5%8f%a3%e7%9a%84uiscene/
4、iOS App生命周期管理:https://fangjunyu.com/2025/05/20/ios-app%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e7%ae%a1%e7%90%86/
5、iOS窗口容器UIWindow:https://fangjunyu.com/2025/05/20/ios%e7%aa%97%e5%8f%a3%e5%ae%b9%e5%99%a8uiwindow/
6、iOS界面UIView:https://fangjunyu.com/2025/05/20/ios%e7%95%8c%e9%9d%a2uiview/
7、iOS代理类AppDelegate:https://fangjunyu.com/2025/05/20/ios%e4%bb%a3%e7%90%86%e7%b1%bbappdelegate/
8、iOS UIApplication类:https://fangjunyu.com/2025/05/20/ios-uiapplication%e7%b1%bb/
9、iOS管理多窗口的SceneDelegate:https://fangjunyu.com/2025/05/20/ios%e7%ae%a1%e7%90%86%e5%a4%9a%e7%aa%97%e5%8f%a3%e7%9a%84scenedelegate/
10、SwiftUI和iOS核心类UIViewController:https://fangjunyu.com/2025/05/19/swiftui%e5%92%8cios%e6%a0%b8%e5%bf%83%e7%b1%bbuiviewcontroller/
