iphone - CALayer 并获取其 UIView 的当前上下文

标签 iphone calayer

我尝试学习iphone中UIView的绘制过程。 据我了解,仅当方法 [UIView drawRect] 存在时,绘图过程才会发生。 它以 [ CALayer display 开头] 并从该方法中调用 [UIView drawRect] (准确地说:首先调用 [ UIView drawLayer:layer inContext:context ] 并从该方法中调用 [UIView drawRect] )。

我有 2 个问题:

  1. [ CALayer display 怎么样? ] 方法获取UIView的上下文? (在 [ UIView drawLayer:layer inContext:context ] 方法中的 [ CALayer display ] 中使用)
  2. CALayer 内容的更新是如何发生的? (此处链接中描述的更新:[CALayer display])

最佳答案

对于你的第一个问题,我宁愿说 CALayer 根据 CGContextRef 创建上下文,然后将其传递给作为其委托(delegate)的 View 。 关于你的第二个问题,据我观察,CALayers 似乎与硬件和视频内存非常接近。实际上,如果您将 CGImageRef 设置为 CALayer 的内容,您将直接在视频内存中传递屏幕上的图像(这是一个耗时的操作)。所以我猜想 CALayer 从它的 CGContextRef 中获取一种图像(已被 View 填充的图像),然后将其指定为其内容。或者,也许创建的上下文直接是视频内存中的一个空间,并且drawRect中的每个绘制操作都会触发对该内存的访问...

不过,我不是这些过程的专家,我只能根据我所看到的来猜测发生了什么。 请注意,我说的是“视频内存”,但我认为 iPhone 上没有这样的东西,而是专门用于视频操作的主内存的一部分。该部分已映射,您可以在仪器中使用 VMTracker 查看消耗情况。 再说一次,我对此不确定,如果有人有更多信息,我会很高兴听到!

关于iphone - CALayer 并获取其 UIView 的当前上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333270/

相关文章:

iphone - 振动命令仅在手机设置为静音时有效?

cocoa - 使用CALayer的renderInContext : method with geometryFlipped

ios - 如何在两个图像之间进行锯齿形图层分离

iphone - 复制 Roambi 应用程序的 Cardex View

iphone - 自动录制视频 15 秒并保存到目录

iphone - 创建IBOutlet并用代码连接

ios - 如何组合核心动画 CATransform3D 矩阵以动画同时平移和缩放

ios - 为什么两个矩阵相乘需要与其在变换矩阵中的视觉应用顺序相反的顺序

ios - 如何在图层内部绘制并仅在 [view Layer addSublayer :newLayer]?

iphone - UINavigationBar 和 UITableView 之间的工具栏?