【问题标题】:CALayer alpha mask not workingCALayer alpha 蒙版不起作用
【发布时间】:2011-05-06 15:12:53
【问题描述】:

我正在尝试创建一个将图像绘制到图层的简单示例,然后设置该图层的 alpha 蒙版。我将下面的代码添加到我的示例应用程序的 viewDidLoad。不设置蒙版,我可以看到叶子的图像。设置蒙版后,我看不到我的子图层所在的位置。我究竟做错了什么?

这是我正在使用的两张图片(只是我在网上找到的示例) http://sorenworlds.netfirms.com/Alpha/leaf.jpg

http://sorenworlds.netfirms.com/Alpha/leaf-alfa.jpg

self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);


CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectMake(30, 30, 128, 192);
[self.view.layer addSublayer:sublayer];

CGImageRef img = [UIImage imageNamed:@"leaf.jpg"].CGImage;
sublayer.borderColor = [UIColor blackColor].CGColor;
sublayer.borderWidth = 2.0;
sublayer.contents = img;

CGImageRef imgAlpha = [UIImage imageNamed:@"leaf_alpha.jpg"].CGImage;   
CALayer *alphaLayer = [CALayer layer];
alphaLayer.contents = (id)imgAlpha;
sublayer.mask = alphaLayer;

非常感谢任何帮助。

【问题讨论】:

    标签: iphone objective-c ios quartz-graphics calayer


    【解决方案1】:

    你的代码有几个问题:

    1. CALayer 类引用说遮罩层的 alpha 用于遮罩父层。您的遮罩层 (alphaLayer) 是使用不包含 alpha 值的 JPG 创建的。 Quartz 不明白您想将蒙版图像中的灰度 RGB 像素值用作 alpha 值,并且没有代码可以调用来执行此操作(据我所知)。

      Quartz 可能会将掩码图像中缺少 alpha 解释为每个像素的 0 alpha,这就是为什么什么都不显示。

      我建议使用 Pixelmator 之类的绘图程序,并从原始叶子图像制作一个 PNG 文件(内置 alpha 值)。这样做无需在代码中添加遮罩层。

    2. 您的文件名是“leaf-alfa.jpg”,但在您的代码中是“leaf_alpha.jpg”。

    3. 子图层必须在其父图层的坐标中布局。您没有这样做,也没有为遮罩层设置边界。图层的默认边界是空矩形,因此即使您使用带有适当 alpha 蒙版的图像,您仍然什么也看不到(或者可能只是没有蒙版的原始叶子图像)。你需要做这样的事情:

      alphaLayer.bounds = CGRectMake(0, 0, 128, 192);
      alphaLayer.position = CGPointMake(sublayer.bounds.size.width/2.0,
                                        sublayer.bounds.size.height/2.0);
      

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2017-07-03
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多