使CALayer透明化

时间:2011-11-01 19:36:31

标签: ios calayer quartz-graphics quartz-core

考虑以下内容......

假设我有两个CALayer,一个在另一个之上。每一层都是整个iPad屏幕的大小,顶层遮盖了底层。

是否有某种方法可以将 top 图层的一部分标记为“透明”,以便 bottom 图层的相同部分透过透明部分显示?换句话说,有没有办法“切掉”顶层的一部分,露出下面的底层?

4 个答案:

答案 0 :(得分:0)

CALayer mask属性。您需要在整个边界上将CALayer子类化为drawToContext:不透明黑色,然后执行CGContextClear(ctx, <your see-through box>);

然后创建图层的一个实例,为它提供与顶层边界相同的框架,并将其设置为蒙版属性。

答案 1 :(得分:0)

是的,您可以通过为每个图层创建不同的Alpha值来实现, 基本上内层(超级)应至少具有0.7的alpha值,外层(subLayer)应具有比其父级更低的alpha值,假设为0.3 然后外层应露出内层。

但是如果你想做一些更好的启示,你可以通过在它上面设置径向渐变来绘制外层。

这是我的示例代码,但我没有为外层绘制径向渐变。

  // 
        CALayer *innnerLayer = [CALayer layer];
        innnerLayer.borderColor = [UIColor greenColor].CGColor;
        innnerLayer.borderWidth = 0.8f;
        innnerLayer.backgroundColor = [UIColor colorWithWhite:0. alpha:0.5].CGColor;
        innnerLayer.frame = CGRectMake(70.0, 150.0f, 100.0f, 100.0f); 
       CALayer *outLayer = [CALayer layer];
        outLayer.frame = innnerLayer.bounds;
        outLayer.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.3f].CGColor;
        // add outer layer to inner layer
        [innnerLayer addSublayer:outLayer];
         // add the inner layer to main view
        [self.view.layer addSublayer:innnerLayer];

//尝试使用不同的alpha值,但使用outerAlpha

答案 2 :(得分:0)

您使用CALayer作为UIView的子图层吗?您必须将UIView的backgroundColor设置为清除如下:

self.backgroundColor = [UIColor clearColor];

答案 3 :(得分:-1)

backgroundColor属性设为NULL只会帮助我。