标签:add view 偶数 通过 app 方式 证明 方向 逆时针
主要有两种闭合方式
1.kCAFillRuleNonZero
这种的定义是从一个点发射一条射线,如果与其相交的线的方向自左向右则+1,如果自右向左则-1,如果穿过所有的线后其结果为0,则点在包含区域的外面,如果结果不为0则在包含区域内。以此来形成闭合区域,最直接的例子,一个矩形区域中放一个逆时针的圆,其包含区域就是圆和矩形之间的区域
[bpath appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(50, 30, 315, 50)]];
[bpath appendPath:[UIBezierPath bezierPathWithArcCenter:self.maskView.center radius:100 startAngle:0 endAngle:2*M_PI clockwise:NO]];
2.kCAFillRuleEvenOdd
这种的判断方法是通过一个点发射一条射线,判断与边界线的交点的个数,如果个数是奇数的则证明在包含区域的内部,如果是偶数则在外部。
这个相对好理解一点,例如一个封闭的圆,发射一条射线如果只有一个交点则在内部(不说切点)
CGRect myRect = CGRectMake(0, 0, 375, 667);
//背景
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:myRect cornerRadius:0];
//镂空
UIBezierPath *circlePath = [UIBezierPath bezierPathWithRect:CGRectMake(30, 30, 315, 50)];
[path appendPath:circlePath];
[path setUsesEvenOddFillRule:YES];
CAShapeLayer *fillLayer = [CAShapeLayer layer];
fillLayer.path = path.CGPath;
fillLayer.fillRule = kCAFillRuleEvenOdd;//中间镂空的关键点 填充规则
fillLayer.fillColor = [UIColor grayColor].CGColor;
self.maskView.layer.mask = fillLayer;
[self.view addSubview:self.maskView];
则可以做个镂空的图。
标签:add view 偶数 通过 app 方式 证明 方向 逆时针
原文地址:https://www.cnblogs.com/andi0816/p/9556654.html