这一晃就到了2017年,这期间好多假期啊,圣诞节、元旦,还赶上了一次为期一周的封闭开发。距离上一次更新文章过去了三周多,好羞惭。
在此之前,分享了一些关于绘图方面的基础。可以通过传输门快捷进入:
上一篇写了Quartz2D的一些基本用法,今天分享一下Quartz2D的渲染模式。
1. 渲染模式
- 空心 StrokePath- 实心 FillPath 和 EOFillPath (填充)
- 填充一个路径的时候,路径里面的子路径都是独立填充的。
- 假如是重叠的路径,决定一个点是否被填充,有两种规则
- 1,nonzero winding number rule(非零绕数规则),假如一个点被从左到右跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。
- 2,even-odd rule(奇偶规则),假如一个点被跨过1次,被跨过了奇数次,那么要被填充,被跨过偶数次则不填充,和方向没有关系
2. even-odd rule:奇偶填充规则
- 当一个点被覆盖过奇数次则“填充”,偶数次则“不填充”。
CGContextEOFillPath(ctx);
奇偶填充规则
3. nonzero winding number rule:非零绕数规则
- 当一个点被从左到右覆盖过标记为1,从右到左覆盖过标记为-1
CGContextDrawPath(ctx, kCGPathEOFillStroke);
- 当标记为0的时候不填充,其他则填充- 简单总结,这个规则与方向有关,与次数无关
非零绕数规则
4. 其他会用到的渲染模式
- 调用
CGContextDrawPath(context, kCGPathFill)
填充路径。 - 调用
CGContextDrawPath(context, kCGPathStroke)
描边路径。 - 调用
CGContextDrawPath(context, kCGPathFillStroke)
填充并描边路径。
5. 混合模式
- 调用
CGContextSetBlendMode(context, kCGBlendModeNormal)
设置回合模式。
混合模式与常用的图形软件(如 Photoshop)的混合模式效果相同。有没有瞬间觉得高大上啊?
如果有兴趣继续深入了解,可以参考:官方文档。
在简书上,还看到过一篇连载,非常不错。Falme 的Core Graphics - Quartz 2D Programming Guide(中文翻译版)
下一篇咱们就要开始聊一聊OC下的贝塞尔曲线绘制了。