4

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

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

至于CATiledLayer的缺点:

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

1 回答 1

1

drawLayer:inContext:中,您可以使用 获取边界框CGContextGetClipBoundingBoxCGContextGetCTM应该为您提供有关当前分辨率的信息。

于 2011-09-09T13:31:24.387 回答