iOS贝塞尔曲线详解

#import 
#import 
#import 

NS_ASSUME_NONNULL_BEGIN

typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,
    UIRectCornerTopRight    = 1 << 1,
    UIRectCornerBottomLeft  = 1 << 2,
    UIRectCornerBottomRight = 1 << 3,
    UIRectCornerAllCorners  = ~0UL
};

NS_CLASS_AVAILABLE_IOS(3_2) @interface UIBezierPath : NSObject

//初始化
+ (instancetype)bezierPath;

//初始化一个矩形路径
+ (instancetype)bezierPathWithRect:(CGRect)rect;

//初始化一个椭圆路径,相切矩形的四条边。
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;

//初始化一个圆角矩形,矩形区域 边角半径
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;

/**
 初始化圆角矩形

 @param rect 矩形区域
 @param corners 枚举:哪个角是圆角(多个时用 ‘|’分开)
 @param cornerRadii 圆角半径
 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

/**
 初始化一个开放圆弧路径

 @param center 圆心
 @param radius 半径
 @param startAngle 开始角度(0-M_PI)
 @param endAngle 结束角度
 @param clockwise 是否顺时针
 */
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

//根据CGPath初始化对象
+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;

- (instancetype)init NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;

//设置路径,也可以获取一个不可变的路径!
@property(nonatomic) CGPathRef CGPath;
- (CGPathRef)CGPath NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED;

//移动到当前点
- (void)moveToPoint:(CGPoint)point;

//到当前点画一条直线
- (void)addLineToPoint:(CGPoint)point;

/**
 追加画一条三次贝塞尔曲线

 @param endPoint 结束点
 @param controlPoint1 控制点1
 @param controlPoint2 控制点2
 */
- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;

/**
 追加画一条二次贝塞尔曲线

 @param endPoint 结束点
 @param controlPoint 控制点
 */
- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;

/**
 追加一条圆弧

 @param center 中心点
 @param radius 半径
 @param startAngle 开始角度
 @param endAngle 结束角度
 @param clockwise 是否顺时针
 */
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);

//闭合路径
- (void)closePath;

//去除所有路径
- (void)removeAllPoints;

//追加bezierPath
- (void)appendPath:(UIBezierPath *)bezierPath;

// 将原来的UIBezierPath反方向绘制(两个路径一样,方向不一样)
- (UIBezierPath *)bezierPathByReversingPath NS_AVAILABLE_IOS(6_0);

// 进行放射,2D变换
- (void)applyTransform:(CGAffineTransform)transform;

// Path info
@property(readonly,getter=isEmpty) BOOL empty;      //路径是否为空
@property(nonatomic,readonly) CGRect bounds;        //路径区域
@property(nonatomic,readonly) CGPoint currentPoint; //当前点
- (BOOL)containsPoint:(CGPoint)point;               //是否包含某个点

// Drawing properties
@property(nonatomic) CGFloat lineWidth;             //线宽
@property(nonatomic) CGLineCap lineCapStyle;        //曲线终点样式 枚举
@property(nonatomic) CGLineJoin lineJoinStyle;      //曲线连接处样式 枚举
@property(nonatomic) CGFloat miterLimit;    // 连接处lineJoinStyle值是kCGLineJoinMiter,内角与外角距离,最大限制10
@property(nonatomic) CGFloat flatness;      //渲染精度(默认0.6),数值越小,精度越高也越耗时!
@property(nonatomic) BOOL usesEvenOddFillRule; // 是否使用基偶填充规则,(默认是NO 非零规则)

/**
 绘制虚线路径

 @param pattern C语言数组 CGFloat xx[] = {线段长度,间隙长度}; 轮流
 @param count 数组个数
 @param phase 从第几个数开始绘制
 */
- (void)setLineDash:(nullable const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;

/**
 获取虚线样式

 @param pattern 数组(空间必须大于路径空间)
 @param count 数组个数
 @param phase 开始位数
 */
- (void)getLineDash:(nullable CGFloat *)pattern count:(nullable NSInteger *)count phase:(nullable CGFloat *)phase;

- (void)fill;       //填充
- (void)stroke;     //画线

/**
 混合填充

 @param blendMode 填充模式 枚举
 @param alpha 透明度
 */
- (void)fillWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;

/**
 混合画线

 @param blendMode 模式 枚举
 @param alpha 透明度
 */
- (void)strokeWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;

//剪切路径 之后路径只能在区域里画线
- (void)addClip;

@end

NS_ASSUME_NONNULL_END

你可能感兴趣的:(iOS贝塞尔曲线详解)