UIBezierPath
由于项目需要,用到了贝塞尔曲线,原来也没有具体的研究,今天有时间研究了下,写了几行demo测试了下,以后项目中估计还会用到。
UIBezierPath 是UIKit框架的一个类,继承于NSObject,是框架Core Graphics对于path的一个OC封装,使用这个类你可以很简单的画矩形、圆形、椭圆、弧线以及你想要的复杂的形状图形,来满足项目中的需求。
先来看下这个类都有什么属性及方法;
+(instancetype)bezierPath;实例化对象
+(instancetype)bezierPathWithRect:(CGRect)rect; //根据frame创建一个实例对象
+(instancetype)bezierPathWithOvalInRect:(CGRect)rect;//根据frame实例化对象,画椭圆
+(instancetype)bezierPathWithRoundedRect:(CGRect)rectcornerRadius:(CGFloat)cornerRadius;//根据frame 角半径来确定一个类似于矩形的形状 并返回实例对象
+(instancetype)bezierPathWithRoundedRect:(CGRect)rectbyRoundingCorners:(UIRectCorner)cornerscornerRadii:(CGSize)cornerRadii;//根据给定的frame、矩形四个角的具体哪个角以及角的半径来确定一个实例对象
+(instancetype)bezierPathWithArcCenter:(CGPoint)centerradius:(CGFloat)radiusstartAngle:(CGFloat)startAngleendAngle:(CGFloat)endAngleclockwise:(BOOL)clockwise;//画椭圆、圆、弧线,并返回实例对象,参数依次是:圆中心点、开始的角度、结束的角度、顺逆时针;
+(instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;//根据CGPath实例化对象
@property(nonatomic)CGPathRef CGPath; //CGPathRef属性
-(CGPathRef)CGPath
-(void)moveToPoint:(CGPoint)point;//起点
-(void)addLineToPoint:(CGPoint)point;//添加线到具体的某个点
-(void)addCurveToPoint:(CGPoint)endPointcontrolPoint1:(CGPoint)controlPoint1controlPoint2:(CGPoint)controlPoint2;//两个控制点的曲线线段
-(void)addQuadCurveToPoint:(CGPoint)endPointcontrolPoint:(CGPoint)controlPoint;//一个控制点的曲线
-(void)addArcWithCenter:(CGPoint)centerradius:(CGFloat)radiusstartAngle:(CGFloat)startAngleendAngle:(CGFloat)endAngleclockwise:(BOOL)clockwiseNS_AVAILABLE_IOS(4_0);//画椭圆、圆、弧线,并返回实例对象,参数依次是:圆中心点、开始的角度、结束的角度、顺逆时针;
-(void)closePath;//关闭当前路径(关闭与不关闭有区别,demo会讲到)
-(void)removeAllPoints;//移除所有设置的点
-(void)appendPath:(UIBezierPath*)bezierPath;//没写demo测试,有兴趣可以试试
-(void)applyTransform:(CGAffineTransform)transform;
-(UIBezierPath*)bezierPathByReversingPath
@property(nonatomic)CGFloat lineWidth;//线宽
@property(nonatomic)CGLineCap lineCapStyle;//有三种:1、kCGLineCapSquare 2、kCGLineCapButt 3、kCGLineCapRound
@property(nonatomic)CGLineJoin lineJoinStyle;//有三种://1、kCGLineJoinBevel拐角以斜线结束 2、kCGLineJoinMiter拐角以直角结束 3、kCGLineJoinRound拐角以圆角形式结束
@property(nonatomic)CGFloat miterLimit; //UsedwhenlineJoinStyleiskCGLineJoinMiter
@property(nonatomic)CGFloat flatness;
@property(nonatomic)BOOL usesEvenOddFillRule;
-(void)fill;//填充
-(void)stroke;//画线
还有几个方法属性不常用,就没有贴上,以上是经常用到的方法和属性,下面展示demo:
1、划线
//画线
UIBezierPath*bezierPath=[UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(10,10)];//起点
[bezierPath addLineToPoint:CGPointMake(10,50)];//加条线,从点移动到另一个点
[bezierPath addLineToPoint:CGPointMake(50,50)];//加条线,从点移动到另一个点
bezierPath.lineJoinStyle=kCGLineJoinRound;
bezierPath.lineCapStyle=kCGLineCapRound;
[bezierPath closePath];//关闭贝塞尔线(是否首尾连接)
UIColor*fillColor=[UIColor greenColor];//设置颜色
[fillColor set];//填充颜色
[bezierPath stroke];//贝塞尔线进行填充
待续......