UIView常用属性
UIView 是 iOS 应用程序中用于显示和管理用户界面的基本构建块。它有许多属性用于配置其外观和行为。以下是一些常用的 UIView 属性及其用途:
常用 UIView 属性
- frame:CGRect
- 视图在其父视图坐标系统中的位置和大小。适用于确定视图的位置和尺寸。
- bounds:CGRect
- 视图自己的坐标系统中的位置和大小。通常原点是 (0, 0),尺寸和 frame 一样。
- center:CGPoint
- 视图中心点在其父视图坐标系统中的位置。
- backgroundColor:UIColor?
- 视图的背景颜色。
- alpha:CGFloat
- 视图的不透明度,从 0.0(完全透明)到 1.0(完全不透明)。
- isHidden:Bool
- 一个布尔值,指示视图是否隐藏。
- clipsToBounds:Bool
- 一个布尔值,指示子视图是否限制在视图的边界内。
- transform:CGAffineTransform
- 应用于视图的二维几何变换,如旋转、缩放和平移。
- layer:CALayer
- 视图的底层图层对象,用于详细的图形和动画控制。
- tag:Int
- 一个整数值,用于标识视图,可以在视图层次结构中查找视图。
- autoresizingMask:UIView.AutoresizingMask
- 用于调整视图在父视图中的位置和大小,支持自动布局。
- superview:UIView?
- 视图的父视图。
- subviews:[UIView]
- 视图的子视图数组。
- isUserInteractionEnabled:Bool
- 一个布尔值,指示视图是否接收用户交互。
- tintColor:UIColor!
- 视图的色调,影响子视图。
为什么uiview和calayer都能设置背景颜色?
每个 UIView 都有一个关联的 CALayer。当你设置 UIView 的一些属性(如 backgroundColor)时,实际上这些设置会反映到其关联的 CALayer 上。例如,当你设置 UIView 的 backgroundColor 时,它会自动将颜色转换为 CGColor 并设置到 CALayer 的 backgroundColor 属性上。
为什么设置颜色的类型不同,UIView使用UIcolor,而calayer使用cgcolore?
- 高层次 API:UIView 使用 UIColor 是因为它提供了更多的功能和便利方法,便于开发者在用户界面层次上进行颜色管理和操作。
- 低层次 API:CALayer 使用 CGColor 是因为它需要直接与图形硬件和渲染管道交互,CGColor 提供了更高效的表示方式。
为什么有 CALayer 去控制视图而不是直接 UIView.zPosition
UIView 和 CALayer 是两个紧密结合但独立的概念,它们的设计分工明确,各自负责不同的职责:
- 视图层次与职责分离:
- UIView 主要处理用户交互和事件响应,以及视图层次结构管理(如添加、移除子视图)。
- CALayer 主要负责视图的渲染、动画以及更细粒度的图形操作(如阴影、边框、角半径等)。
- 性能和优化:
- 将图形和动画相关的操作委托给 CALayer 可以更好地利用底层的图形硬件加速和优化,提高性能。
- CALayer 可以独立于 UIView 执行动画,而不必重新布局或重新计算视图层次结构。
- 动画和图形特性:
- CALayer 提供了许多高级图形特性,如阴影、边框、角半径、3D 变换等,简化了复杂 UI 的实现。
- 使用 CALayer 控制动画可以实现平滑的过渡和复杂的视觉效果,而不会影响 UIView 的事件处理逻辑。
- 灵活性和复用:
- 将绘制和布局分离使得 UIView 和 CALayer 更加灵活,可以在不改变视图层次结构的情况下,修改图层的外观和动画效果。
- CALayer 可以复用在多个 UIView 中,提供一致的图形效果。
CALayer 常用属性
- zPosition:CGFloat
- 控制图层在其父图层中的堆叠顺序,类似于 CSS 中的 z-index。
- cornerRadius:CGFloat
- 控制图层的圆角半径。
- borderWidth:CGFloat
- 控制图层边框的宽度。
- borderColor:CGColor?
- 控制图层边框的颜色。
- shadowOpacity:Float
- 控制图层阴影的不透明度。
- shadowRadius:CGFloat
- 控制图层阴影的模糊半径。
- shadowOffset:CGSize
- 控制图层阴影的偏移。
- shadowColor:CGColor?
- 控制图层阴影的颜色。
- masksToBounds:Bool
- 一个布尔值,指示子图层是否限制在图层的边界内。
- transform:CATransform3D
- 图层的三维变换矩阵,用于3D动画和变换。