UIBezierPath的使用

1. 使用UIBezierPath绘制多边形

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPath];// 设定起始点[aPath moveToPoint:CGPointMake(0.0f, 0.0f)];// 添加点[aPath addLineToPoint:CGPointMake(100.0f, 100.0f)];[aPath addLineToPoint:CGPointMake(0.f, 50.f)];// 闭合path[aPath closePath];

2. 使用UIBezierPath绘制圆形

    // 将常数转换为度数#define   DEGREES(degrees)  ((3.14159265359f * degrees)/ 180.f)// 获取pathUIBezierPath *aPath = \[UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) // 圆的中心radius:50.f                // 圆的半径startAngle:DEGREES(0)          // 起始点endAngle:DEGREES(360)        // 结束点clockwise:YES];               // 顺时针

3. 使用UIBezierPath绘制矩形

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 100, 100)];

4. 使用UIBezierPath绘制椭圆

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 50, 70)];

5. 使用UIBezierPath绘制圆角矩形

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100)cornerRadius:10.f];

6. 使用UIBezierPath绘制带部分圆角的矩形

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100)byRoundingCorners:UIRectCornerTopLeftcornerRadii:CGSizeMake(100, 100)];

7. 使用UIBezierPath绘制不规则曲线1

    // 获取path    UIBezierPath *aPath = [UIBezierPath bezierPath];

    // 设定起始点    [aPath moveToPoint:CGPointMake(0.0f, 0.0f)];

    // 添加一个不规则点    [aPath addCurveToPoint:CGPointMake(100.f, 100.f)             controlPoint1:CGPointMake(50.f, 0.f)     // 开始点             controlPoint2:CGPointMake(0.f, 50.f)];   // 结束点

    // 添加一个点    [aPath addLineToPoint:CGPointMake(0.0f, 100.f)];

    // 闭合path    [aPath closePath];

8. 使用UIBezierPath绘制不规则曲线2

    // 获取pathUIBezierPath *aPath = [UIBezierPath bezierPath];// 设定起始点[aPath moveToPoint:CGPointMake(0.0f, 0.0f)];// 添加一个不规则点[aPath addQuadCurveToPoint:CGPointMake(100.f, 100.f)controlPoint:CGPointMake(0.f, 90.f)];   // 控制点// 添加一个点[aPath addLineToPoint:CGPointMake(0.0f, 100.f)];// 闭合path[aPath closePath];

9. 使用path与CAShapeLayer配合制作mask遮罩效果(path闭环里面的填充区域就是作为遮罩使用的)

    // 创建一个viewUIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];showView.backgroundColor = [UIColor greenColor];showView.layer.contents = (__bridge id)([UIImage imageNamed:@"1"].CGImage);// 创建一个椭圆的pathUIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];// 创建一个CAShapeLayer并获取椭圆的pathCAShapeLayer *layer = [CAShapeLayer layer];layer.path = aPath.CGPath;// 把这个CAShapeLayer添加为maskshowView.layer.mask = layer;

10. 使用Core Graphics函数去修改path
UIBezierPath类只是CGPathRef数据类型和path绘图属性的一个封装。虽然通常我 们可以用UIBezierPath类的方法去添加直线段和曲线段,UIBezierPath类还提供了一个属性CGPath,我们可以用来直接修改底层的 path data type。如果我们希望用Core Graphics 框架函数去创建path,则我们要用到此属性。
有两种方法可以用来修改和UIBezierPath对象相关的path。可以完全的使用Core Graphics函数去修改path,也可以使用Core Graphics函数和UIBezierPath函数混合去修改。第一种方法在某些方面相对来说比较容易。我们可以创建一个CGPathRef数据类型, 并调用我们需要修改path信息的函数。
下面的代码就是赋值一个新的CGPathRef给UIBezierPath对象。
如 果我们使用Core Graphics函数和UIBezierPath函数混合方法,我们必须小心的移动path 信息在两者之间。因为UIBezierPath类拥有自己底层的CGPathRef data type,我们不能简单的检索该类型并直接的修改它。相反,我们应该生成一个副本,然后修改此副本,然后赋值此副本给CGPath属性,如下代码:
Mixing Core Graphics and UIBezierPath calls

UIBezierPath的使用(持续更新)相关推荐

  1. iOS小技巧总结,绝对有你想要的(持续更新)

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView a ...

  2. 自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

    自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常 ...

  3. s-systemtap工具使用图谱(持续更新)

    整体的学习思维导图如下,后续持续更新完善 文章目录 安装 简介 执行流程 执行方式 stap脚本语法 探针语法 API函数 探针举例 变量使用 基本应用 1. 定位函数位置 2. 查看文件能够添加探针 ...

  4. swift 错误集合 ------持续更新中

    从今天开始凡是在用swift中遇到的错误都会在本博客持续更新 便于自己学习和快速开发 2017.7.20 如果你的程序写的有进入后台的方法,例如我的博客中点击home进入后台持续定位的那篇文章,发信进 ...

  5. 快应用开发常见问题以及解决方案【持续更新】

    接触快应用也有一段时间了,踩过了大大小小的坑,让我活到了今天.准备在此立贴持续更新,记录遇到的问题以及解决方案,造福大众. css 方面 1.文字竖排不支持 目前官方还不支持writing-mode, ...

  6. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

  7. UDP 构建p2p打洞过程的实现原理(持续更新)

    UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...

  8. 大四狗找工作,持续更新

    持续更新中.... 转载于:https://www.cnblogs.com/Wiki-ki/p/3979176.html

  9. 中date转为string_股票数据获取篇(持续更新中...)

    这是第一篇量化交易学习文,心里还是有点忐忑,毕竟自己不是金融人士,金融业务能力匮乏,所以从最简单的数据获取入手,各种概念各种策略还在学习中.回测框架选择backtrader,因为网上对此框架的评价甚高 ...

最新文章

  1. C# winform版 nbtstat
  2. 如何理解JavaScript原型
  3. MySQL:从B树到B+树到索引再到存储引擎
  4. Winform中跨窗体设置ZedGraph的属性并刷新曲线图
  5. 朱峰谈概念设计(七)创作性绘画教程
  6. Android 高级Drawable资源---复合Drawable----层Drawable
  7. 发布软件之前,怎样告诉用户怎么用
  8. jasper 获取当前日期_入侵Jasper以获取JSP页面的对象模型
  9. 工作185:解决vue+el-element二级联动,选项选择后不显示的问题
  10. Java与C语言混合编程
  11. 风变Python3---if条件相关的学习
  12. 在mysql中修改表名的sql语句
  13. spring mvc 实现websocket(服务器主动消息推送)
  14. Mac AE2018软件安装及破解
  15. 在你的ipad上使用Vscode撸代码(快速操作向)
  16. pytorch 提取权重_获取Pytorch中间某一层权重或者特征
  17. YOLOv4: Optimal Speed and Accuracy of Object Detection
  18. 神经网络与深度学习 相关
  19. T237012 体积
  20. python tkinter treeview_Python tkinter treeview列大小

热门文章

  1. 代友招中高级.NET开发工程师【上海-徐汇】
  2. Delphi 与 DirectX 之 DelphiX(52): TDIB.DoSaturation();
  3. left join 一对多_MYSQL 连接查询算法:JOIN语句在 MYSQL 内部到底是怎么执行的
  4. JAVA SE学习day_04:RandomAccessFile
  5. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件
  6. 在python中可以使用for作为变量名对吗,在Python中使用循环来命名变量
  7. vrrp广播风暴_企业园区网MSTP+VRRP组合
  8. php 中memcache的应用场景,php当中的memcache应用
  9. 搜集了一些模型,精模低模都有
  10. 南非的5DT数据手套使用说明