UIView和CALayer之间的关系是什么?

ran*_*mor 5 cocoa-touch design-patterns calayer uiview

所以这是我的理解:setNeedsDisplay在UIView和CALayer类中都有一个,UIView是一个包含CALayer的复合类.但是UIView drawRect:在CALayer使用时使用drawLayer:inContext:它们都setNeedsDisplay用来调用它.这是一些协议还是什么?所以我想在UIView的实现中,创建了一个CALayer,并将该层的委托设置为UIView类?这两个班级之间究竟有什么关系?那么drawRect:UIView基本上解析它的内容并调用drawLayer:inContext:它的层?这是什么样的设计模式?我正试图解决这两个类如何工作的问题,谢谢.

Dan*_*son 0

这是苹果的所有实现细节,所以我不确定。此外,不同的视图类与其图层之间的关系也不同。

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

也就是说,我想最基本的UIView行为就是setNeedsDisplay简单地将调用转发到该层。然后,当在drawLayer:inContext:视图上调用 时,它会设置UIGraphics上下文内容并调用drawRect:.