2

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

我有两个问题:

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

1 回答 1

2

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

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

于 2010-02-26T14:10:22.027 回答