3

您可能知道,CATiledLayer用于通过以适合视图大小的比例显示平铺图像来显示大图像。

我的CATiledLayer工作类似于可以在 iOS 文档下找到的示例,我计算了drawRect:(CGRect)rect 在哪一行和哪一列试图绘制其内容。

当视图第一次出现时,它开始在空白视图上逐块绘制,该视图/图层后面没有任何内容。我首先尝试放置低分辨率图像以填充图层,然后开始绘制平铺视图。

就像您在浏览 PDF 页面时一样,每个页面最初都以非常差的图像表示,但足以看到内容布局,当您停在某个页面时,该页面会变得更加清晰。

我知道我可以在 catiledlayer 之上添加子图层,但我无法在 catiledlayer 后面放置任何图层,因为这是一个 masterlayer。我也相信在同一层上加载背景图像很重要,这样可以适当地缩放。

有谁知道如何实现这一目标?

4

1 回答 1

1

我终于弄清楚了这一点,并感谢关键评论。

你必须做的:

  1. 使用函数 drawLayer:inContext: 中的所有动态加载逻辑创建 CATiledLayer 的子类 - 此函数类似于 drawRect: 在 View 中
  2. 初始化新的子类 CATiledLayer
  3. 用低分辨率图像初始化新的 CALayer
  4. 创建新的 UIView *myView = [UIView ...] 或 UIImageView (取决于您的需要)
  5. 将 myView.layer 中的两个图层作为 subLayer

UIView *imageView = [[UIView alloc] initWithFrame:viewFrame];

DCTiledLayer *tiledLayer = [[DCTiledLayer alloc] initWithData:myData];

CALayer *lowResLayer = [CALayer layer];
lowResLayer.position = CGPointMake(CGRectGetMidX(viewFrame), CGRectGetMidY(viewFrame));
lowResLayer.bounds = viewFrame;
lowResLayer.contents = (id)[lowResImage CGImage];

[imageView.layer addSublayer:lowResLayer];
[imageView.layer addSublayer:tiledLayer];

它就像一个魅力。:)

于 2012-08-17T07:07:03.487 回答