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

 

 

 

时间: 2024-10-06 06:53:46

UIBezierPath的使用(持续更新)的相关文章

300+篇运维、数据库等实战资料免费下载(文章+PDF+视频,持续更新)

2017年已过去一半,在此小编为大家精心整理了2017上半年热点事件解析.实战技术资料以及特别策划短视频系列,希望可以帮助大家更深入地回顾上半年的技术热点,并储备更充足的技术干粮继续2017的下一半. PART 1 峰会回顾资料 云栖大会 [上海云栖大会]2017云栖大会上海峰会资料合计(现场视频+PDF下载) [成都云栖大会]2017云栖大会成都峰会资料合计(现场视频+PDF下载) [南京云栖大会]2017云栖大会南京峰会资料合计(现场视频+PDF下载) 技术峰会 [运维/DevOps峰会]

IOS开发--常用工具类收集整理(Objective-C)(持续更新)

 前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 这些可复用的工具,一定会给你实际项目开发工作锦上添花,会给你带来大大的工作效率. 重复造轮子的事情,除却自我多练习编码之外,就不要傻傻的重复造轮子了,还是提高工作效率,早点完成工作早点回家陪老婆孩子. 所以下面备份的常用工具类一定是你需要的. 前提:你有一定的开发经验,知道它们在开发的什么地方需要,你都不知道用在哪里,那你需要个毛啊,还是好好另外学好基础吧.少儿不宜,请离开哦. 插件目录列表:(持续更新和添加) 1.UI

给大家推荐几款个人觉得特别好用的编程及日常用的软件(持续更新!)

原文:给大家推荐几款个人觉得特别好用的编程及日常用的软件(持续更新!) 子曾经曰过:"工欲善其事,必先利其器!",呵呵,好用的软件必然会对工作和生活提高很多效率,下面我就把我个人觉得不错的软件整理出来,这里可能之前提到过几个,不过没关系,以后我再发现好用的东西会在这里持续更新! 宝典总数:[27个]  更新时间:[2015年1月29日09:04:21] ※宝典1:源代码管理软件-"CODEHELP" CodeHelp是专门为我们程序员设计的一款源代码管理软件.它能方

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数

iOS之github第三方框架(持续更新)

1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github上可以下载到项目源码https://github.com/jdg/MBProgressHUD 百度云链接: http://pan.baidu.com/s/1pKa5JrP 密码: qw6k 百度云链接: http://pan.baidu.com/s/1dErLfrz 密码: ixbn (小码哥进一步

开源个asp.net框架,方便扩展,会持续更新,欢迎使用

问题描述 会持续更新,当前用到一个推送的系统上面下载地址:BuildsuperoftheenterprisewebsiteLicenseWTFPL(DoWhattheFuckYouWanttoPublicLicensehttps://github.com/anak10thn/WTFPL)EnvironmentDevelopinglanguage:C#FrameworkVersion:4.0Database:SQL2005orlaterCurrentfunction:1.Multilanguage

这些开源项目,你都知道吗?(持续更新中...)[原创]

原文 这些开源项目,你都知道吗?(持续更新中...)[原创] Json.NET  http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换.   Math.NET http://www.mathdotn

seo问答交流(持续更新中)

通过问答交流的形式,可以帮助我们提升对于seo技术的认知,更深刻的理解相关概念,解答疑惑.以持续更新的方式,解答常见的网站seo优化问题,笔者会第一时间回复所有问题.seo问答交流详细内容有很多,请仔细阅读: seo问答交流 1,问:如何查询移动端网站的收录? 答:通过百度站长平台验证网站,通过后台的索引量查询收录,较为准确. 2,问:每天都在更新文章,但是不收录? 答:可以用排除法,网站是否被搜索引擎蜘蛛爬取过:是否为处于审核期的新站点:网站是否由于过度seo优化,被黑等问题处于降权中:更新的

Android LookAround开元之旅(持续更新中...)

http://blog.csdn.net/lancees/article/details/17696805 应用介绍 随便瞧瞧是一款为android用户量身定做的免费图文资讯软件 集美食,星座,写真,文学,美女等频道于一体 界面简洁,操作流畅,图文分享,个性收藏 是广大卓粉的必备神器 APK下载 -->http://apk.91.com/Soft/Detail.aspx?Platform=Android&f_id=40495952         工程简介以下是代码结构图: 该工程用到以下开