透明层

透明层通过组合来生成一个组合图形。当需要在一组对象上使用特效时,透明层非常有用。

透明层如何绘制

  • 调用CGContextBeginTransparencyLayer开始透明层
  • 绘制组合对象
  • 调用CGContextEndTransparencyLayer结束透明层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);

TransparencyLayer

注意点

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

TransparencyLayer

原理

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

坚持原创技术分享,您的支持将鼓励我继续创作!