UIView和CALayer之间有什么关系?

5
这是我的理解:UIView和CALayer类中都有一个“setNeedsDisplay”,UIView是包含CALayer的复合类。但UIView使用“drawRect:”,而CALayer使用“drawLayer:inContext:”。它们都使用“setNeedsDisplay”来调用它。这是某种协议吗?所以我猜在UIView的实现过程中,会创建一个CALayer,并将该层的委托设置为UIView类?这两个类之间的关系是什么?那么UIView中的“drawRect:”基本上是解析其内容并调用其层的“drawLayer:inContext:”?这是哪种设计模式?我试图理解这两个类如何工作,谢谢。
1个回答

0

这都是苹果的实现细节,我不能确定。不同的视图类与它们的图层有不同的关系。

例如,UIImageView被明确记录为不调用drawRect:。这可能是因为设置图像会直接更新图层的contents属性,而不通过渲染方法。

话虽如此,我想大多数基本的UIView行为是setNeedsDisplay简单地将调用转发到图层。然后,当在视图上调用drawLayer:inContext:时,它设置了UIGraphics上下文相关内容并调用了drawRect:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接