Mat*_*t H 3 iphone objective-c calayer quartz-graphics ios
我正在尝试创建一个将图像绘制到图层,然后设置该图层的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;
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
pe8*_*ter 11
您的代码有几个问题:
CALayer类引用表示掩码图层的alpha用于掩盖父图层.您的遮罩层(alphaLayer)是使用JPG创建的,该JPG不包含Alpha值.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);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
7752 次 |
| 最近记录: |