iOS界面UIView
iOS界面UIView

iOS界面UIView

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/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注