此外,苹果还说:
“直接使用核心动画层提供内容的应用程序可能需要调整其绘制代码以考虑比例因子。通常情况下,当您在视图的 drawRect: 方法或 layer 的代理的 drawLayer:inContext: 方法中进行绘制时,系统会自动调整图形上下文以考虑比例因子。”
这意味着绘制代码是否需要调整取决于您在哪里进行绘制: 是否是视图的 drawRect: 方法或 layer 代理的 drawLayer:inContext: 方法。但这个自动调整只适用于视图的主备用层,对于每个添加到主备用层作为子层的其他层是否也适用不太清楚。苹果也说:
“如果您的应用程序创建不带关联视图的层,则每个新建的层对象的比例因子最初设置为 1.0。如果您不更改该比例因子,并且随后在高分辨率屏幕上绘制该层,则该层的内容会自动缩放以补偿比例因子的差异。如果您不希望内容被缩放,可以将该层的比例因子更改为 2.0,但如果您这样做没有提供高分辨率内容,则现有内容可能会比预期更小。要解决该问题,需要为该层提供更高分辨率的内容。”我很难想象一个没有视图的图层,我可以想象一个图层的层次结构,但一旦我想要显示它们,我应该将它们作为视图的后备图层的子层次添加进去,或者存在其他使用它们的方法吗(例如创建并在上下文中渲染)?
核心动画的合成引擎查看每个图层的contentsScale属性,以确定该图层的内容是否需要在合成过程中进行缩放。如果您的应用程序创建没有关联视图的图层,则每个新图层对象的比例因子最初设置为1.0。如果您不更改该比例因子,并且随后在高分辨率屏幕上绘制该图层,则图层的内容会自动缩放以补偿比例因子的差异。如果您不希望内容被缩放,您可以将图层的比例因子更改为2.0,但是如果您这样做而没有提供高分辨率内容,则现有内容可能会比您预期的要小。要解决此问题,您需要为图层提供更高分辨率的内容。
那实际上是什么意思呢?当我像这样做
layer.contents = (id)image.CGImage
时,我需要设置contentsScale。当我的图层通过调用委托方法
drawLayer:inContext:
绘制其内容,并且该图层不是视图的后备图层时,我是否还需要设置它?