原文链接:http://blog.csdn.net/lgm252008/article/details/34819743、
文中的图很重要!!!
根据下文,完成了下图的mask:
代码如下:
CGSize size = self.size;
// 画路径
UIBezierPath *maskPath = [UIBezierPath bezierPath];
// bottom line
[maskPath moveToPoint:CGPointMake(size.width, 0)];
[maskPath addLineToPoint:CGPointMake(size.width, 91)];
[maskPath addArcWithCenter:CGPointMake(size.width, 99.f)
radius:PIXEL_8
startAngle:1.5*M_PI endAngle:0.5*M_PI
clockwise:NO];
[maskPath addLineToPoint:CGPointMake(size.width, size.height)];
[maskPath addLineToPoint:CGPointMake(0, size.height)];
[maskPath addLineToPoint:CGPointMake(0, 107.f)];
[maskPath addArcWithCenter:CGPointMake(0, 99.f)
radius:PIXEL_8
startAngle:0.5*M_PI endAngle:1.5*M_PI
clockwise:NO];
[maskPath addLineToPoint:CGPointMake(0, 0)];
[maskPath addLineToPoint:CGPointMake(size.width, 0)];
[maskPath closePath];
// 画出 形状
CAShapeLayer *maskLayer = [CAShapeLayer new];
maskLayer.path = maskPath.CGPath;
self.layer.mask = maskLayer;
------------------华丽的分割线-------------------
UIBezierPath通过
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise
可以画出一段弧线。
看下各个参数的意义:
center:圆心的坐标
radius:半径
startAngle:起始的弧度
endAngle:圆弧结束的弧度
clockwise:YES为顺时针,No为逆时针
方法里面主要是理解startAngle与endAngle,刚开始我搞不清楚一段圆弧从哪算起始和终止,比如弧度为0的话,是从上下左右哪个点开始算
看了下面这张图就明了了
看出0Pi就是指圆最右边开始计算的,顺时针依次为M_PI/2,M_PI,M_PI*1.5
明白这个,用BezierPath画圆弧就简单了
比如要画上图加粗的那段就是: