博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用UIBezierPath贝塞尔曲线配合CAShapeLayer抠图
阅读量:6652 次
发布时间:2019-06-25

本文共 2091 字,大约阅读时间需要 6 分钟。

hot3.png

##使用UIBezierPath贝塞尔曲线配合CAShapeLayer抠图

###系统提供的UIBezierPath构造方法

先来看看构造方法列表,以及构造出来的形状,具体详见后面的示例及图片。

1、矩形

+ (instancetype)bezierPathWithRect:(CGRect)rect;

2、内切圆,即椭圆

+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;

3、圆角矩形

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

,可设置圆角的半径

4、部分圆角的矩形

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

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

5、圆弧

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

* center: 圆心坐标* radius: 圆的半径* startAngle: 起点角度* endAngle: 终点角度* clockwise: 是否顺时针

6、指定路径

+ (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

转载于:https://my.oschina.net/u/3729372/blog/1591239

你可能感兴趣的文章
第一课——git的简介和基本使用
查看>>
CentOS7 安装mysql-5.7.10(glibc版)
查看>>
Python之FTP实现
查看>>
AC日记——第K大的数 51nod 1105
查看>>
The Commercial Open-Source Monitoring Landscape
查看>>
剑指offer:构建乘积数组
查看>>
C++ 的intialization list 和assignment
查看>>
mysqli
查看>>
字符串逆序输出
查看>>
Java对象及其引用 (1)
查看>>
spark中RDD和DataFrame之间的转换
查看>>
洛谷 P1036 选数【背包型DFS/选or不选】
查看>>
STAR法则
查看>>
兼容所有浏览器的复制方法
查看>>
iOS tableView自定义删除按钮
查看>>
2014年(实际上是2014界毕业生)互联网IT公司产品、技术类人员工资待遇
查看>>
List的foldLeft、foldRight、sort操作代码实战之Scala学习笔记-28
查看>>
svn revert说明
查看>>
plsql快捷开发
查看>>
移植x264到vs2008之二
查看>>