|
|
1
1
CALayer有一个框架(或者等价地说,一个边界和一个原点),逻辑上用来确定要绘制什么。当drawInContext:或等价物被调用时,它是决定内容如何生成的框架。 然而,与OS X一样,iOS采用了一个合成窗口管理器,这意味着视图知道如何将它们的输出绘制到缓冲区中,并且这些缓冲区被组合起来创建视图,窗口管理器在两者之间确定如何处理缓存和视频内存管理。 如果调整视图或图层类的“变换”属性,则调整合成的方式。但是,drawInContext:的结果应该仍然是显式的,这样窗口管理器知道它可以只使用缓存的图像。 因此,例如,如果您设置一个128x128大小的帧,然后将CALayer放大一倍的变换,您将占用屏幕的256x256区域,但用于合成的图像将只有128x128大小,使每个源像素变成四个目标像素。如果设置256x256大小的帧和标识转换,则覆盖的屏幕空间大小相同,但每个源像素与目标像素的比例为1:1。 一个副作用是更改框架会导致从第一个原则重新绘制。更改转换不会。因此后者通常更快,如果决定使用CATiledLayer(如在Safari、Maps等中使用的)之类的工具在单独的线程中绘制,并且可能需要一段时间才能得出结果,则也需要这样做。 根据经验,您可以使用框架设置初始位置,并为正常工作更新框架。您可以使用变换来进行变换和其他特殊效果。但是,CATiledLayer的所有帧和变换属性在CoreAnimation意义上都是可设置动画的,因此这仍然由您决定。 大多数人不在CALayer级别上工作,但更喜欢使用UIViews。在这种情况下,注释基本上是相同的,但需要注意的是,您可以调整视图上的[2d]变换或视图层上的[3d]变换,然后让合成器将其全部解决,但更改帧以提示重新绘制。 |