CATiledLayer的背景图片

时间:2012-06-30 17:23:12

标签: iphone ios catiledlayer

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

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

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

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

我知道我可以在catiledlayer上添加子图层但是我无法在catiledlayer后面添加任何图层,因为这是一个版主图层。我还认为在同一层加载背景图像非常重要,这样才能正确缩放。

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

1 个答案:

答案 0 :(得分:1)

我终于想出了这个以及关键评论的thanx。

你需要做什么:

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

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

    它就像一个魅力。 :)