开发者社区> 游贤明> 正文

UIBezierPath的使用(持续更新)

简介:
+关注继续查看

UIBezierPath的使用

1. 使用UIBezierPath绘制多边形

// 获取path
    UIBezierPath *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)
    
    // 获取path
    UIBezierPath *aPath = \
    [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) // 圆的中心
                                   radius:50.f                // 圆的半径
                               startAngle:DEGREES(0)          // 起始点
                                 endAngle:DEGREES(360)        // 结束点
                                clockwise:YES];               // 顺时针

3. 使用UIBezierPath绘制矩形

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

4. 使用UIBezierPath绘制椭圆

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

5. 使用UIBezierPath绘制圆角矩形

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

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

    // 获取path
    UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100)
                                                byRoundingCorners:UIRectCornerTopLeft
                                                      cornerRadii: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

// 获取path
    UIBezierPath *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闭环里面的填充区域就是作为遮罩使用的)

// 创建一个view
    UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    showView.backgroundColor = [UIColor greenColor];
    showView.layer.contents = (__bridge id)([UIImage imageNamed:@"1"].CGImage);

    // 创建一个椭圆的path
    UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];

    // 创建一个CAShapeLayer并获取椭圆的path
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.path = aPath.CGPath;
    
    // 把这个CAShapeLayer添加为mask
    showView.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

 

 
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一个不使用CRM中间件成功地将ERP Material下载到CRM的原型开发
一个不使用CRM中间件成功地将ERP Material下载到CRM的原型开发
19 0
ThinkSNS + 后端2019年1月更新播报
社交软件系统ThinkSNS+界面一览图 研发发布版本号:2.1.5 和 2.2.2 更新发布时间:2019年1月29日 社交系统ThinkSNS+后端本次主要更新内容:搜索地区体验优化、优化收藏页面排版、修正读取兑换比例问题、过滤 XSS、修复关注话题问题等 社交系统ThinkSNS+后端2.
1512 0
Zuul整合Swagger,使用ZuulFilter解决下游服务context-path
问题起因:使用Zuul网关服务,需要整合下游系统的swagger,但是下游服务存在context-path配置,无法正确跳转,最后使用ZuulFilter解决。 1.Zuul整合下游swagger 首先介绍一下Zuul如何整合下游服务swagger,很好理解,就是通过Zuul的swagger地址,实现将下游服务的swagger都放入同一个页面内,流转图如下: 1.
371 0
python中使用os.path.join()
os.path.join的详细解释请移步os.path模块 在使用的过程中,我使用如下代码: import os path = "F:/gts/gtsdate/" b = os.path.join(path,"/abc") 输出结果是: 'F:/abc' 并不是我期望的: "F:/gts/gtsdate/abc" 原因是在os.path.join()第二个参数"/abc"起始字符是/。
1318 0
使用X-UA-Compatible来设置IE浏览器兼容模式
文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE8引入了文件兼容性。
890 0
+关注
711
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载