美文网首页
ios绘制透明图层

ios绘制透明图层

作者: 清风沐沐 | 来源:发表于2017-12-05 21:49 被阅读619次

    绘制透明图层

    • 调用CGContextBeginTransparencyLayer开始透明层
    • 绘制组合对象
    • 调用CGContextEndTransparencyLayer结束透明层
        CGContextSetShadowWithColor(context, CGSizeZero, 10, [UIColor yellowColor].CGColor);
        CGContextBeginTransparencyLayer(context, NULL);
        CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
        CGContextFillEllipseInRect(context, CGRectMake(100, 150, 100, 100));
        CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
        CGContextFillEllipseInRect(context, CGRectMake(150, 100, 100, 100));
        CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
        CGContextFillEllipseInRect(context, CGRectMake(150, 150, 100, 100));
        CGContextEndTransparencyLayer(context); 
    
    效果图1

    注意

    CGContextSetShadowWithColor一定要在CGContextBeginTransparencyLayer透明层开始之前。
    因为CGContextBeginTransparencyLayer与CGContextEndTransparencyLayer之间是一个整体,你可以把整个看做是一个对象,阴影作用在整个对象上面,如果写在CGContextBeginTransparencyLayer之后,那么就变成内部组合对象每一个都有阴影。 也就是说写不写透明层都没有关系了。 如下图没有加透明层或者阴影写在了透明层内部,可以看到视图层叠处也有阴影。


    效果图2

    原因:

    Quartz透明层可以理解为一个对象组,对象组里面又有多个对象。效果都会作用域对象组。Quartz为每一个上下文维护一个透明层栈。可以嵌套。当CGContextEndTransparencyLayer调用后,Quartz讲对象放入上下文。并使用上全文的全局alpha值、阴影状态、剪裁区域作用域对象组。

    相关文章

      网友评论

          本文标题:ios绘制透明图层

          本文链接:https://www.haomeiwen.com/subject/dgdhixtx.html