Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 什么';这是UIView和CALayer之间的关系_Cocoa Touch_Design Patterns_Uiview_Calayer - Fatal编程技术网

Cocoa touch 什么';这是UIView和CALayer之间的关系

Cocoa touch 什么';这是UIView和CALayer之间的关系,cocoa-touch,design-patterns,uiview,calayer,Cocoa Touch,Design Patterns,Uiview,Calayer,我的理解是:在UIView和CALayer类中都有一个setNeedsDisplay,UIView是一个包含CALayer的复合类。但是UIView使用drawRect:,而CALayer使用drawLayer:inContext:它们都使用setNeedsDisplay来调用它。这是协议还是什么?所以我猜在UIView实现的某个时刻,会创建一个CALayer,并将该层的委托设置为UIView类?这两个类之间到底有什么关系?因此UIView中的drawRect:基本上是在解析它的内容,并调用它的

我的理解是:在UIView和CALayer类中都有一个
setNeedsDisplay
,UIView是一个包含CALayer的复合类。但是UIView使用
drawRect:
,而CALayer使用
drawLayer:inContext:
它们都使用
setNeedsDisplay
来调用它。这是协议还是什么?所以我猜在UIView实现的某个时刻,会创建一个CALayer,并将该层的委托设置为UIView类?这两个类之间到底有什么关系?因此UIView中的
drawRect:
基本上是在解析它的内容,并调用它的层的
drawLayer:inContext:
?这是什么样的设计模式?我在想这两门课是怎么上的,谢谢

这是苹果所有的实施细节,所以我不能确定。此外,不同的视图类将与其图层具有不同的关系

例如,
UIImageView
不调用
drawRect:
。这可能是因为设置图像实际上会直接更新层的
内容
属性,而无需使用渲染方法

也就是说,我认为最基本的
UIView
行为是
setNeedsDisplay
只是将调用转发给层。然后,在视图上调用
drawLayer:inContext:
时,它设置
UIGraphics
上下文内容并调用
drawRect: