跳到主要内容

UIView常用属性

UIView 是 iOS 应用程序中用于显示和管理用户界面的基本构建块。它有许多属性用于配置其外观和行为。以下是一些常用的 UIView 属性及其用途:

常用 UIView 属性

  1. frame:CGRect
  • 视图在其父视图坐标系统中的位置和大小。适用于确定视图的位置和尺寸。
  1. bounds:CGRect
  • 视图自己的坐标系统中的位置和大小。通常原点是 (0, 0),尺寸和 frame 一样。
  1. center:CGPoint
  • 视图中心点在其父视图坐标系统中的位置。
  1. backgroundColor:UIColor?
  • 视图的背景颜色。
  1. alpha:CGFloat
  • 视图的不透明度,从 0.0(完全透明)到 1.0(完全不透明)。
  1. isHidden:Bool
  • 一个布尔值,指示视图是否隐藏。
  1. clipsToBounds:Bool
  • 一个布尔值,指示子视图是否限制在视图的边界内。
  1. transform:CGAffineTransform
  • 应用于视图的二维几何变换,如旋转、缩放和平移。
  1. layer:CALayer
  • 视图的底层图层对象,用于详细的图形和动画控制。
  1. tag:Int
  • 一个整数值,用于标识视图,可以在视图层次结构中查找视图。
  1. autoresizingMask:UIView.AutoresizingMask
  • 用于调整视图在父视图中的位置和大小,支持自动布局。
  1. superview:UIView?
  • 视图的父视图。
  1. subviews:[UIView]
  • 视图的子视图数组。
  1. isUserInteractionEnabled:Bool
  • 一个布尔值,指示视图是否接收用户交互。
  1. 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 是两个紧密结合但独立的概念,它们的设计分工明确,各自负责不同的职责:

  1. 视图层次与职责分离:
  • UIView 主要处理用户交互和事件响应,以及视图层次结构管理(如添加、移除子视图)。
  • CALayer 主要负责视图的渲染、动画以及更细粒度的图形操作(如阴影、边框、角半径等)。
  1. 性能和优化:
  • 将图形和动画相关的操作委托给 CALayer 可以更好地利用底层的图形硬件加速和优化,提高性能。
  • CALayer 可以独立于 UIView 执行动画,而不必重新布局或重新计算视图层次结构。
  1. 动画和图形特性:
  • CALayer 提供了许多高级图形特性,如阴影、边框、角半径、3D 变换等,简化了复杂 UI 的实现。
  • 使用 CALayer 控制动画可以实现平滑的过渡和复杂的视觉效果,而不会影响 UIView 的事件处理逻辑。
  1. 灵活性和复用:
  • 将绘制和布局分离使得 UIView 和 CALayer 更加灵活,可以在不改变视图层次结构的情况下,修改图层的外观和动画效果。
  • CALayer 可以复用在多个 UIView 中,提供一致的图形效果。

CALayer 常用属性

  1. zPosition:CGFloat
  • 控制图层在其父图层中的堆叠顺序,类似于 CSS 中的 z-index。
  1. cornerRadius:CGFloat
  • 控制图层的圆角半径。
  1. borderWidth:CGFloat
  • 控制图层边框的宽度。
  1. borderColor:CGColor?
  • 控制图层边框的颜色。
  1. shadowOpacity:Float
  • 控制图层阴影的不透明度。
  1. shadowRadius:CGFloat
  • 控制图层阴影的模糊半径。
  1. shadowOffset:CGSize
  • 控制图层阴影的偏移。
  1. shadowColor:CGColor?
  • 控制图层阴影的颜色。
  1. masksToBounds:Bool
  • 一个布尔值,指示子图层是否限制在图层的边界内。
  1. transform:CATransform3D
  • 图层的三维变换矩阵,用于3D动画和变换。