使用UIBezierPath貝塞爾曲線配合CAShapeLayer摳圖

##使用UIBezierPath貝塞爾曲線配合CAShapeLayer摳圖app

###系統提供的UIBezierPath構造方法code

先來看看構造方法列表,以及構造出來的形狀,具體詳見後面的示例及圖片。圖片

一、矩形it

+ (instancetype)bezierPathWithRect:(CGRect)rect;方法

二、內切圓,即橢圓im

+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;img

三、圓角矩形di

+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; // rounds all corners with the same horizontal and vertical radiusview

,可設置圓角的半徑vi

四、部分圓角的矩形

+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

* rect: 矩形frame
* corners: 要畫成圓角的部位
* cornerRadii: 圓角的大小

五、圓弧

+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

* center: 圓心座標
* radius: 圓的半徑
* startAngle: 起點角度
* endAngle: 終點角度
* clockwise: 是否順時針

六、指定路徑

+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;

###配合CAShapeLayer

利用CAShapeLayer,能畫出各類形狀,只須要將UIBezierPath的CGPath賦予CAShapeLayer的path便可。

####代碼示例

// 要摳的透明區域位置
CGRect cutFrame = CGRectMake(0, 200, self.view.bounds.size.width, 400);
UIBezierPath *cutPath1 = [UIBezierPath bezierPathWithRect:cutFrame];//圖1 - 普通矩形
/*
 UIBezierPath *cutPath2 = [UIBezierPath bezierPathWithRoundedRect:cutFrame cornerRadius:20];//圖2 - 圓角爲20的圓角矩形
 UIBezierPath *cutPath3 = [UIBezierPath bezierPathWithRoundedRect:cutFrame byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(20, 20)];//圖3 - 左上和右上爲圓角20的部分圓角矩形
 UIBezierPath *cutPath4 = [UIBezierPath bezierPathWithOvalInRect:cutFrame];//圖4 - 內切圓(橢圓)
 */

// 要摳透明區域的原圖
CGRect viewFrame = self.view.bounds;
UIBezierPath *viewPath = [UIBezierPath bezierPathWithRect:viewFrame];

// 調用bezierPathByReversingPath,進行路徑反轉,纔會產生摳圖效果
[viewPath appendPath:[cutPath1 bezierPathByReversingPath]];

// 配合CAShapeLayer,調用layer(此layer必須是第一層,不能嵌套)的setMask方法設置遮罩層
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = viewPath.CGPath;
[self.view.layer setMask:shapeLayer];

####效果圖

#####圖1 - 普通矩形

General preferences pane

#####圖2 - 圓角爲20的圓角矩形

General preferences pane

#####圖3 - 左上和右上爲圓角20的部分圓角矩形

General preferences pane

#####圖4 - 內切圓(橢圓)

General preferences pane

相關文章
相關標籤/搜索