因为各种原因,我考虑制作自己的CATiledLayer实现。我做了一些调查,但似乎无法弄清楚CATiledLayer如何知道提供哪个瓷砖。
例如,当您滚动图层时,永远不会调用setPosition:或setBounds:。看起来后台线程只是在没有任何触发器的情况下随意调用委托的drawLayer:inContext:。
我已经发现CATiledLayer使用“CAImageProvider”的实例调用setContent:并且所有对drawLayer:inContext:的调用都源自该类。所以,这可能是确定要绘制哪个瓷砖的关键。但我找不到有关该类的任何文档。
那么...有人知道这是如何工作的,以及我如何覆盖它吗?
至于CATiledLayer的缺点:
- 它总是使用屏幕分辨率(或x2、x4等);您无法将其设置为源图像的本机分辨率 - 您无法指定除2以外的任何其他缩放因子 - 您必须指定levelsOfDetail和levelsOfDetailBias,对此我完全没有实现原因。如果您具有可以无限缩放的内容,例如分形,则这非常限制。 - 最重要的是:如果您将其限制为仅在一个方向上缩放(我通过在setTransform:中强制一方向的比例因子为1来实现),它会表现出所有奇怪的行为。
例如,当您滚动图层时,永远不会调用setPosition:或setBounds:。看起来后台线程只是在没有任何触发器的情况下随意调用委托的drawLayer:inContext:。
我已经发现CATiledLayer使用“CAImageProvider”的实例调用setContent:并且所有对drawLayer:inContext:的调用都源自该类。所以,这可能是确定要绘制哪个瓷砖的关键。但我找不到有关该类的任何文档。
那么...有人知道这是如何工作的,以及我如何覆盖它吗?
至于CATiledLayer的缺点:
- 它总是使用屏幕分辨率(或x2、x4等);您无法将其设置为源图像的本机分辨率 - 您无法指定除2以外的任何其他缩放因子 - 您必须指定levelsOfDetail和levelsOfDetailBias,对此我完全没有实现原因。如果您具有可以无限缩放的内容,例如分形,则这非常限制。 - 最重要的是:如果您将其限制为仅在一个方向上缩放(我通过在setTransform:中强制一方向的比例因子为1来实现),它会表现出所有奇怪的行为。