CATiledLayer的背景图片

3

你可能知道,CATiledLayer 用于显示大型图像,通过以适合视图大小的比例显示分瓷块图像。

我已经使 CATiledLayer 类似于可以在 iOS 文档中找到的示例,并计算出 drawRect:(CGRect) 矩形尝试绘制其内容的行和列。

当视图首次出现时,它会在空白视图上逐个绘制平铺图像,该视图/层后面没有任何东西。我正在尝试先放置低分辨率图像来填充图层,然后开始绘制平铺视图。

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

我知道我可以在 catiledlayer 上方添加子层,但是我无法在 catiledlayer 后面放置任何层,因为这是主层。我还相信,在同一层上加载背景图像很重要,以便可以正确缩放。

有人有什么想法如何实现这一点吗?


将加载低质量图像的图层作为主图层,并将高分辨率图层放在其上方,您觉得如何? - WolfLink
1个回答

1

我终于搞明白了,感谢关键评论。

你需要做的:

  1. 创建CATiledLayer的子类,并将所有动态加载逻辑放在函数drawLayer:inContext:中 - 这个函数就像View中的drawRect:
  2. 初始化你的新子类CATiledLayer
  3. 使用低分辨率图像初始化新的CALayer
  4. 创建新的UIView *myView = [UIView ...]或UIImageView(根据你的需求)
  5. 将这两个层作为子层放入myView.layer中

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];

它运行得非常好。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接