码迷,mamicode.com
首页 > 其他好文 > 详细

UIBezierPath 类的使用

时间:2017-05-13 14:52:02      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:ati   corners   remove   style   float   意义   改变   clock   设置   

使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。
UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。

 + (instancetype)bezierPath;//创建一个基本路径
 + (instancetype)bezierPathWithRect:(CGRect)rect;// 矩形
 + (instancetype)bezierPathWithOvalInRect:(CGRect)rect;// 椭圆
 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; // 带圆角度的矩形
 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;// 带指定方向圆角度的矩形
 + (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;// 弧线,
 /*
         center: 圆弧中心
         radius: 圆弧半径
         startAngle: 起点的角度(相对角度坐标系 0)
         endAngle: 结束点的角度(相对角度坐标系 0)
         clockwise: 是否顺时针方向
         */

 + (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath; //通过 CGPath创建

 - (void)moveToPoint:(CGPoint)point; // 设置线段的起点
 // add*系列--定义一个或多个subpaths
 - (void)addLineToPoint:(CGPoint)point;// 添加直线
 - (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);// 添加弧线
 - (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;// 添加二次贝塞尔曲线
 - (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2; // 添加三次贝塞尔曲线

 // 绘制
 - (void)fill;// 线条区域颜色填充
 - (void)stroke;// 线条颜色绘制
 - (void)closePath; // 结束一个图形的subpath,也会连接最后一个点与初始点之间的直线
- (void)removeAllPoints; //移除所有的点,删除所有的subPath
- (void)appendPath:(UIBezierPath *)bezierPath; // 将bezierPath添加到当前path

创建和使用一个UIBezierPath大概分为四步骤:
(1)创建一个Bezier path对象。
(2)使用方法moveToPoint:去设置初始线段的起点。
(3)添加line或者curve去定义一个或者多个subpaths。
(4)改变UIBezierPath对象跟绘图相关的属性。

 CAShapeLayer 介绍

   - 简单介绍:
     CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性。但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义。

     #CAShapeLayer和drawRect的比较
     - 1.drawRect:属于CoreGraphics框架,占用CPU,性能消耗大
     - 2.CAShapeLayer:属于CoreAnimation框架,通过GPU来渲染图形,节省性能。动画渲染直接提交给手机GPU,不消耗内存

技术分享

CAShapeLayer与UIBezierPath的关系

- 1.CAShapeLayer中shape代表形状的意思,所以需要形状才能生效
- 2.贝塞尔曲线可以创建基于矢量的路径,而UIBezierPath类是对CGPathRef的封装
- 3.贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染。路径会闭环,所以绘制出了Shape
- 4.用于CAShapeLayer的贝塞尔曲线作为path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线

代码具体的使用请参考 demo :https://github.com/SummerHH/BezierPath.git

 效果图:

技术分享

 

参考:

http://www.jianshu.com/p/b1c38a3a67a9 iOS - 关于贝塞尔曲线与CAShapeLayer的学习
 [UIBezierPath类 介绍](http://blog.csdn.net/crayondeng/article/details/11093689)

 

UIBezierPath 类的使用

标签:ati   corners   remove   style   float   意义   改变   clock   设置   

原文地址:http://www.cnblogs.com/ningmengcao-ios/p/6848742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!