CALayer
主要负责显示内容,继承自 NSObject
。
UIView
主要对 CALayer
做了简单的封装(UIView
类中有个成员变量 layer
就是 CALayer
类型)。另外,UIView
继承自 UIResponder
类,所以也会负责处理触摸事件的响应。
UIView
部分源码如下
open class UIView : UIResponder, NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusItem, UIFocusItemContainer, CALayerDelegate {
open class var layerClass: AnyClass { get }
public init(frame: CGRect)
public init?(coder: NSCoder)
open var isUserInteractionEnabled: Bool
open var tag: Int
open var layer: CALayer { get }
@available(iOS 9.0, *)
open var canBecomeFocused: Bool { get }
@available(iOS 9.0, *)
open var isFocused: Bool { get }
@available(iOS 9.0, *)
open var semanticContentAttribute: UISemanticContentAttribute
......
}
当对一个视图进行绘制的时候,绘图单元会向 CALayer
索取要显示元素的相关数据,此时, CALayer
会通过 delegate
通知到 UIView
,看看 UIView
是否有提供需要绘制的元素。如果 UIView
什么都不需要提供的话,就当作无视。