CATiledLayer 的背景图像

Posted

技术标签:

【中文标题】CATiledLayer 的背景图像【英文标题】:Background image for CATiledLayer 【发布时间】:2012-07-01 19:54:06 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

有一个加载低质量图像的图层作为主图层并将高分辨率图层放在顶部? 【参考方案1】:

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

你必须做什么:

    创建 CATiledLayer 的子类,其中包含函数 drawLayer:inContext: 中的所有动态加载逻辑 - 此函数类似于 drawRect: 在 View 中 初始化新的子类 CATiledLayer 使用低分辨率图像初始化新的 CALayer 创建新的 UIView *myView = [UIView ...] 或 UIImageView(取决于您的需要) 把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];

它就像一个魅力。 :)

【讨论】:

以上是关于CATiledLayer 的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中拍摄 CATiledLayer 支持的视图的图像快照

没有 CATiledLayer 的 iOS 应用程序中的巨大图像?

CATiledLayer 到 CALayer

背景图像未与 s-s-rS 中的气泡图对齐

常见的几种抠图方式?

背景图全屏显示