ios绘制透明图层

绘制透明图层

  • 调用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值、阴影状态、剪裁区域作用域对象组。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容