UIView 是 iOS 中所有“可见界面元素”的基础类。屏幕上看到的所有东西(按钮、标签、图片、动画、滚动视图等),本质上都是 UIView 或其子类。
UIView 的常见子类
1、UILabel:显示文字。
2、UIButton:响应点击的按钮。
3、UIImageView:显示图片。
4、UITableView / UICollectionView:滚动展示数据。
5、UIScrollView:可滚动的视图。
6、UITextField / UITextView:输入框。
UIView 的结构特点
1、视图层级(View Hierarchy)
UIView 是树状结构,一个 UIView 可以包含很多子视图(addSubview()),这些子视图可以再包含自己的子视图。
let parentView = UIView()
let childView = UIView()
parentView.addSubview(childView)
2、位置与大小(Frame & Bounds)
.frame:相对于父视图的位置和大小
.bounds:相对于自己坐标系的位置和大小(通常起点是 (0,0))
UIView 的功能
1、绘图:可以自定义 draw(_:) 来绘制图形。
2、动画:使用 UIView 的动画 API 实现过渡、淡入淡出等效果。
3、响应事件:处理触摸、点击等(配合手势或按钮)。
4、添加子视图:形成 UI 层级结构。
5、设置属性:如背景色、透明度、圆角、边框等视觉样式。
UIView的常用方法
1、视图层级相关
addSubview(_:):添加子视图。
removeFromSuperview():移除自身出父视图。
insertSubview(_:at:):插入子视图到特定位置。
bringSubviewToFront(_:):把子视图提到最上层。
sendSubviewToBack(_:):把子视图放到底层。
2、动画相关
UIView.animate(…):执行动画。
UIView.transition(…):转场动画。
3、手势
addGestureRecognizer(_:):添加手势识别器。
isUserInteractionEnabled:是否允许交互(默认 true)。
4、渲染/绘制
draw(_:):自定义绘图(重写)。
setNeedsDisplay():通知重新绘制视图。
layoutSubviews():子视图布局(重写)。
UIView的常用属性
1、布局相关
frame:视图在父视图中的位置和大小(最常用)。
bounds:视图自己的内部坐标系统。
center:中心点坐标(相对于父视图)。
transform:变换(旋转、缩放、平移)。
2、外观相关
backgroundColor:背景颜色。
alpha:透明度(0~1)。
isHidden:是否隐藏。
clipsToBounds:是否剪裁超出部分。
layer:底层 CALayer,控制阴影/圆角/边框等。
3、布局控制
leadingAnchor、trailingAnchor:用于 Auto Layout。
intrinsicContentSize:固有尺寸(可自定义)。
UIView的生命周期(子类化时)
1、init(frame:) / init(coder:) → 初始化视图。
2、awakeFromNib() → 从 XIB 或 Storyboard 加载。
3、layoutSubviews() → 设置子视图布局。
4、draw(_:) → 绘图(只有需要时才调用)。
UIView 与图层关系(CALayer)
每个 UIView 默认都有一个对应的 CALayer(称为 backing layer)。
UIView 处理事件、布局。
CALayer 处理真正的绘图、动画(更底层)。
常见 layer 属性有:
view.layer.cornerRadius = 10
view.layer.borderColor = UIColor.red.cgColor
view.layer.shadowOpacity = 0.5
UIView 与其他组件的关系
UIViewController:管理一组 UIView 的显示和交互。
UIViewController 的 .view 就是它的主视图,其他控件都会添加到它上面。
一个 UIViewController 通常只管理一个大的根视图(root view),再往里嵌套其他视图。

UIWindow:UIView 的顶级容器,承载整个应用界面。
CALayer:UIView 的图形核心,每个 UIView 都有一个 layer,它负责低层渲染。
使用示例
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let redBox = UIView(frame: CGRect(x: 50, y: 100, width: 100, height: 100))
redBox.backgroundColor = .red
view.addSubview(redBox) // 将 redBox 添加到控制器主视图中
}
}
这个例子中:
MyViewController 管理的是一个 UIView。
在 viewDidLoad 中创建了一个红色方块,并加到了控制器视图上。
总结
UIView 是 iOS 中所有可视界面的基类,用于承载和管理界面元素、布局、绘图和用户交互。
还支持手势识别(如点击、拖动、缩放等),支持 Auto Layout 和 frame 手动布局,与动画系统结合,可做各种过渡、位移、缩放动画,与 hitTest(_:with:) 和响应链配合决定事件传递。
如果想要进一步了解UIView,可以学习以下几个知识点:
1、响应链(Responder Chain):视图如何响应事件。
2、Autoresizing 与 Auto Layout 冲突管理。
3、离屏渲染优化(阴影、圆角等)。
4、性能分析(比如不必要的 addSubview)。
相关文章
1、SwiftUI和iOS核心类UIViewController:https://fangjunyu.com/2025/05/19/swiftui%e5%92%8cios%e6%a0%b8%e5%bf%83%e7%b1%bbuiviewcontroller/
2、iOS窗口容器UIWindow:https://fangjunyu.com/2025/05/20/ios%e7%aa%97%e5%8f%a3%e5%ae%b9%e5%99%a8uiwindow/