CATiledLayer如何知道何时提供新的磁贴?

时间:2011-09-09 10:40:51

标签: iphone ios catiledlayer

由于各种原因,我正在考虑自己实现CATiledLayer。我做了一些调查,但我似乎无法弄清楚CATiledLayer如何知道要提供哪个磁贴。 例如,滚动图层时,永远不会调用setPosition:或setBounds :.它看起来像后台线程只是调用drawLayer:inContext:委托的蓝色,没有任何触发器。 我发现CATiledLayer使用“CAImageProvider”实例调用setContent:并且对drawLayer:inContext的所有调用都来自该类。所以可能一个是确定要绘制的图块的关键。但我找不到该课程的任何文件。

所以...有人知道这是如何工作的,以及我如何能够覆盖它?

至于CATiledLayer的缺点:

  • 它总是使用屏幕分辨率(或x2,x4等);您无法将其设置为源图像的原始分辨率
  • 您不能指定除2
  • 之外的任何其他比例因子
  • 你必须指定levelsOfDetail和levelsOfDetailBias,我没有看到任何实现原因。如果你的内容是无限可扩展的,比如分形,那么这是非常有限的。
  • 最重要的是:如果你将它限制为仅向一个方向放大(我通过在setTransform中强制将一个方向的比例因子强制为1来实现这一点),那就很奇怪了

1 个答案:

答案 0 :(得分:1)

drawLayer:inContext:中,您可以使用CGContextGetClipBoundingBox获取边界框。 CGContextGetCTM应该为您提供有关当前解决方案的信息。