Iphone CALayer alpha遮罩不工作

Iphone CALayer alpha遮罩不工作,iphone,objective-c,ios,quartz-graphics,calayer,Iphone,Objective C,Ios,Quartz Graphics,Calayer,我试图创建一个简单的示例,将图像绘制到一个层,然后设置该层的alpha遮罩。我将下面的代码添加到示例应用程序的viewDidLoad中。不设置遮罩,我可以看到叶子的图像。在我设置了遮罩后,我看不到我的子层所在的位置。我做错了什么 以下是我正在使用的两张图片(只是我在网上找到的样本) 非常感谢您的帮助 您的代码有几个问题: CALayer类引用表示遮罩层的alpha用于遮罩父层。您的遮罩层(alphaLayer)是使用不包含alpha值的JPG创建的。Quartz不明白您想要使用遮罩图像中的灰

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

以下是我正在使用的两张图片(只是我在网上找到的样本)


非常感谢您的帮助

您的代码有几个问题:

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

    Quartz可能将掩模图像中缺少alpha解释为每个像素0 alpha,这就是为什么没有显示任何内容

    我建议使用一个画图程序,比如Pixelmator,用原始的叶子图像制作一个PNG文件(内置了alpha值)。这样做就不需要在代码中添加遮罩层

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

  • 子层必须在其父层的坐标中布局。您没有这样做,也没有为遮罩层设置边界。层的默认边界是空矩形,因此即使使用带有适当alpha遮罩的图像,也不会看到任何内容(或者可能只是没有遮罩的原始叶图像)。您需要执行以下操作:

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