UIBezierPath对象是CGPathRef数据类型的封装。一个UIBezierPath对象是一个完整的路径,包括一个或者多个子路径。
使用步骤:
1、创建一个UIBezierPath对象
2、设置线的属性(宽度,颜色,端点样式,连接点样式)
3、使用方法moveToPoint:去设置初始线段的起点。
4、添加line或者curve去定义一个或者多个subpaths。
5、stroke或者fill
- (void)drawRect:(CGRect)rect {#pragma mark - 画三角形 // 创建一个UIBezierPath对象 UIBezierPath *path = [UIBezierPath bezierPath]; // 设置线的颜色 [[UIColor redColor] set]; // 设置线的宽度 path.lineWidth = 6; // 线端点的样式 path.lineCapStyle = kCGLineJoinRound; // 连接点的样式 path.lineJoinStyle = kCGLineJoinBevel; [path moveToPoint:CGPointMake(20, 70)]; [path addLineToPoint:CGPointMake(100, 80)]; [path addLineToPoint:CGPointMake(20, 90)]; // 闭合路径 [path closePath]; [path stroke];#pragma mark - 画矩形 UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:CGRectMake(140, 100, 50, 90)]; [path2 stroke]; #pragma mark - 画圆(如果是正方形画出来的是圆,如果是长方形画出来的是椭圆) UIBezierPath *path3 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20, 100, 100, 100)]; [path3 stroke]; #pragma mark - 画扇形 UIBezierPath *path4 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 200) radius:50 startAngle:0 endAngle:M_PI * 0.4 clockwise:1]; [path4 addLineToPoint:CGPointMake(200, 200)]; [path4 closePath]; [path4 stroke]; #pragma mark - 画文字 NSString *str = @"附近的开始啦;热Ian; 就"; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:[UIFont systemFontOfSize:20] forKey:NSFontAttributeName]; [str drawInRect:CGRectMake(100, 200, 100, 100) withAttributes:dict]; #pragma mark - 画图片 UIImage *image = [UIImage imageNamed:@"icon_153"]; [image drawInRect:CGRectMake(200, 100, 80, 80)]; }
注:画扇形的时候clockwise的意思是“是否是顺时针”, yes:顺时针;NO:逆时针
绘制二次、三次曲线
#pragma mark - 绘制二次曲线 // 二次曲线由一个起点,一个终点,一个控制点共同决定 UIBezierPath *pathTwo = [UIBezierPath bezierPath]; pathTwo.lineWidth = 5; [pathTwo moveToPoint:CGPointMake(20, 300)]; [pathTwo addQuadCurveToPoint:CGPointMake(200, 300) controlPoint:CGPointMake(110, 400)]; [pathTwo stroke]; #pragma mark - 绘制三次曲线 // 三次曲线由一个起点,一个终点,两个控制点共同决定 UIBezierPath *pathThree = [UIBezierPath bezierPath]; pathThree.lineWidth = 6; [pathThree moveToPoint:CGPointMake(30, 430)]; [pathThree addCurveToPoint:CGPointMake(300, 430) controlPoint1:CGPointMake(50, 200) controlPoint2:CGPointMake(260, 600)]; [pathThree stroke];
以上所有图形的效果图:
- (void)drawRect:(CGRect)rect { /** * 根据一个Rect画一个圆角矩形曲线 当Rect为正方形时且Radius等于边长一半时画的是一个圆 * @param rect CGRect一个矩形 * @param cornerRadius 圆角半径 */ UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(80, 100, 50, 30) cornerRadius:15]; path.lineWidth = 3; [[UIColor redColor] set]; [path fill]; [[UIColor lightGrayColor] set]; [path stroke]; /** * 根据一个Rect针对四角中的某个或多个角设置圆角 * * @param rect CGRect一个矩形 * @param corners 允许指定矩形的部分角为圆角,而其余的角为直角,取值来自枚举 * @param cornerRadii 指定了圆角的半径,这个参数的取值是 CGSize 类型,也就意味着这里需要给出的是椭圆的半径。 */ UIBezierPath *path002 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(150, 100, 60, 30) byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomLeft cornerRadii:CGSizeMake(15, 15)]; path002.lineWidth = 3; [[UIColor redColor] set]; [path002 fill]; [[UIColor lightGrayColor] set]; [path002 stroke];}
效果: