所以我的理解是:UIView和CALayer类中都有setNeedsDisplay
,UIView是一个包含CALayer的复合类。但是UIView使用drawRect:
而CALayer使用drawLayer:inContext:
他们都使用setNeedsDisplay
来调用它。这是一些协议还是什么?所以我想在UIView的实现中,创建了一个CALayer,并将该层的委托设置为UIView类?这两个班级之间究竟有什么关系?那么UIView中的drawRect:
基本上是解析它的内容并调用其层的drawLayer:inContext:
?这是什么样的设计模式?我正试图解决这两个类如何工作的问题,谢谢。
答案 0 :(得分:0)
这是Apple的所有实施细节,所以我不确定。此外,不同的视图类将与其图层具有不同的关系。
例如,UIImageView
为explicitly documented,不致电drawRect:
。这可能是因为设置图像实际上直接更新了图层的contents
属性,而无需通过渲染方法。
那就是说,我认为最基本的UIView
行为是setNeedsDisplay
只是将调用转发给图层。然后,当在视图上调用drawLayer:inContext:
时,它会设置UIGraphics
上下文内容并调用drawRect:
。