![](/img/trans.png)
[英]What's the difference between CALayer -drawInContext: and -renderInContext:?
[英]What is a CALayer?
什么是 CALayer(如 UIView 上的layer
属性所示),我们将在哪里使用这样的 class?
UIView 是一个聚合类。 它包含事件响应链的“内容”、处理视图层次结构的内容等,以及有关在显示器上绘制什么的内容。 UIView 的 CALayer 只是关于绘制什么的东西:图像位、缩放、变换、动画属性等。
Cocoa Touch UI 是通过合成图层...绘制的,视图位于窗口顶部的视图之上。 CALayer 是组合堆栈中的一个层,它位于某些层的顶部,并且可能位于其他层的下方。 (例如,拆分视图中视图中表格单元格中按钮中的图像等)
如果您想对视图绘制或显示的内容做一些特殊的事情,而这些内容在股票 UIView 类方法中没有提供,则可以通过直接转到 CALayer 来做一些特殊的事情:也许在视图和/或图像,在屏幕外绘制东西,自定义动画等。
Apple CALayer 类参考文档中有更多解释
UIView 建立在 CALayer 之上。那只是一个类,它是 UIViews 的可视化内容。 只需使用 NSLog 打印 UIView 并检查,我们可以看到它的内容层和框架。 使用 Core Graphics 直接与 CALayer 一起工作,而不是 UIView 是 UIKit 元素。 self.view.layer.backgroundColor = [UIColor redColor].CGColor;
iOS 内核 Animation 层(CALayer,Layer)
UIView
是第一个入口点,其中包含必要的功能(例如,处理触摸事件[About] ,渲染......)。 CALayer
在这种情况下负责一个图形的东西
UIKit -> Core Animation -> OpenGL, Core Graphics -> Hardware
UIView
包含根CALayer
可以包含 subleyers
let layer = CALayer()
layer.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 50, height: 50))
layer.backgroundColor = UIColor.magenta.cgColor
view1.layer.addSublayer(layer)
你可以找到很多使用CALayer
的案例:动画、圆角半径、阴影……
您可以将CALayer
用于比UIView
更多的低级内容
Xcode v11.4 中的调试层
Debug View Hierarchy -> Editor -> Show Layers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.