對於貝塞爾曲線的閉合方式
主要有兩種閉合方式
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];
則可以做個鏤空的圖。
對於貝塞爾曲線的閉合方式