在贝塞尔曲线画图形的时候 有时候需要嵌套子路径 addPath 比如最近需要画一个正方形中间嵌套一个圆形 来获取头像之类的需求
需要设置layer层来填充规则
填充的规则有两种即CAShapeLayer的FillRule属性有两种 默认是
kCAFillRuleNonZero还有一种是
kCAFillRuleEvenOdd第一种字面意思是非零 我看网上是指射线和图形的交点情况 有些不太懂 但是通过以下图
可以理解当在里面图形是和外围图形都是顺时针绘制的时候 就不会出现内嵌的情况 当外面图形是顺时针绘制而里面的图形是逆时针可以出现空心的情况
圆形的贝塞尔曲线是可以设置顺时针逆时针的
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise但是矩形的绘制是不能定义的 只能是顺时针
+ (instancetype)bezierPathWithRect:(CGRect)rect导致绘制的内外图形如果都是顺时针就不能实现空心的效果 如果是圆形还可以设定 但是矩形的话就不行
但是第二种方法
kCAFillRuleEvenOdd字面的意思是奇偶 网上的解释是从图形内做射线 与图形的交点 偶数是图形外 奇数是图形内 例如下图
这个其实和顺时针逆时针没有关系
本文探讨了使用贝塞尔曲线绘制复杂图形时的填充规则,包括CAShapeLayer的两种填充规则:kCAFillRuleNonZero与kCAFillRuleEvenOdd,并讨论了不同规则下图形绘制的方向如何影响最终呈现。
2268

被折叠的 条评论
为什么被折叠?



