博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz 2D学习(二)绘制曲线
阅读量:6853 次
发布时间:2019-06-26

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

Quartz 2D学习(二)绘制曲线

导语

Quartz 2D是一个二维图形绘制引擎,它支持iOS环境和Mac OS X环境,为开发者提供了很多方便,它在绘图上的功能十分强大,如基于路径的绘图、透明度、阴影、颜色管理、反锯齿、PDF文档生成等。Quartz 2D作为Core Graphics框架的一部分,其中的很多数据类型和方法都是以CG为前缀的。

本篇内容将介绍CGPath的基础知识和绘制曲线的基本流程。

一、为什么要用到CGPath

上文中介绍了Graphics context的基础知识,我们可以在context中设置颜色属性,画笔粗细等各种属性,并绘制图形。

那为什么要用到CGPath呢?
首先,我们要回顾一下graphics context如何绘制路径

  1. 调用CGContextBeginPath

  2. 调用CGContextMoveToPoint来设置路径的起点

  3. 调用CGPathAddLineToPoint, CGPathAddArc, CGPathAddRect等函数添加路径

  4. 最后,我们需要调用fill或stroke来绘制出这些路径或图形。

当我们绘制路径时,Path的信息就会被Graphics context重置。

如果我们想要保存path信息,并多次使用它,我们就可以用到CGPathCreatMutable申请路径,然后用CGPathAddLintToPoint等方法来添加路径。

我们来实验一下,用CGPath来画一条曲线。

- (void)drawRect:(CGRect)rect {    //获取上下文    CGContextRef context = UIGraphicsGetCurrentContext();        //申请路径    CGMutablePathRef path = CGPathCreateMutable();    //将起点设置在坐标(100, 100)处    CGPathMoveToPoint(path, NULL, 100, 100);        /*  CGPathAddArcToPoint(CGMutablePathRef  _Nullable path, const CGAffineTransform * _Nullable m, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius)        此方法表示从起点到(x1, y1)再到(x2, y2)的两条直线为切线的弧,radius表示弧的半径     */    CGPathAddArcToPoint(path, NULL, 100, 200, 300, 200, 100);        //设置“画笔”颜色    CGContextSetStrokeColorWithColor(context,                                   [UIColor blueColor].CGColor);    CGContextAddPath(context, path);    CGContextStrokePath(context);}

于是可以得到一个起点在(100, 100) 半径为100的蓝色曲线。

用CGPath画矩形(其他的图形类似)

- (void)drawRect:(CGRect)rect {    //获取上下文    CGContextRef context = UIGraphicsGetCurrentContext();        //申请路径    CGMutablePathRef path = CGPathCreateMutable();    //此处因为CGRectMake可以设置起点,所以不需要CGPathMoveToPoint    CGPathAddRect(path, NULL, CGRectMake(100, 100, 100, 300));        //设置填充颜色    CGContextSetFillColorWithColor(context,                                   [UIColor blueColor].CGColor);    CGContextAddPath(context, path);    CGContextFillPath(context);}

二、drawRect:

如果我们想要在iOS应用上绘制图形,就必须先申请一个UIView对象,然后实现drawRect:方法。

在视图显示在屏幕上时或者内容需要更新时,drawRect:方法会被调用。所以我们不需要手动去调用这个方法。手动更新内容的方法是setNeedsDisplay。
UIView对象的可以通过CGContextRef对当前的绘图环境进行配置,如上文提到的获取上下文,设置颜色属性,设置填充属性等。

三、绘图方法总结

1. MoveToPoint和Add...(设置点和线)

2. set path (设置线的属性)

3. stroke path(绘制,画线)

4. fill path(绘制,填充图形)

四、CGContextAddArc解释

1.CGContextAddArc

void CGPathAddArc (   CGMutablePathRef _Nullable path,   const CGAffineTransform * _Nullable m,   CGFloat x,   CGFloat y,   CGFloat radius,   CGFloat startAngle,   CGFloat endAngle,   bool clockwise);

其中(x, y)代表圆心,sA代表起始角度,eA代表结束角度,radius代表半径,clockwise代表顺时针还是逆时针

2.CGContextAddArcToPoint

void CGPathAddArcToPoint (   CGMutablePathRef _Nullable path,   const CGAffineTransform * _Nullable m,   CGFloat x1,   CGFloat y1,   CGFloat x2,   CGFloat y2,   CGFloat radius);

P1为path的起始点,这个弧线会以两条直线为切线,radius为半径画弧。


参考:

stackoverflow

转载地址:http://hufyl.baihongyu.com/

你可能感兴趣的文章
12月第1周网络安全报告:85.9万境内主机感染病毒
查看>>
8月国内电脑分辨率TOP10:1920*1080连续三月夺冠
查看>>
全球六大国际域名解析总量达1.6亿 环比净增4.7万
查看>>
12月国内操作系统份额:Win10突破3% 涨幅近1%
查看>>
python基础教程
查看>>
Centos中无法使用make
查看>>
mysql 5.5编译安装
查看>>
生产环境编译安装LNMP环境
查看>>
打通钉钉+WebHook:日志服务告警升级
查看>>
Powerdesigner 自动生成注释
查看>>
C盘安装WIN7,D盘安装CentOS
查看>>
Linux零基础入学之1-4 Linux文件管理-xfs文件系统的备份恢复-服务器来电后自动开机...
查看>>
***的致命诱惑 蜜罐程序
查看>>
php生成图片,在html的img标签中可以正常显示,直接访问网址乱码的问题解决
查看>>
SQL server数据库资料
查看>>
安装 CDH
查看>>
大数据虚拟化零起点-1开篇
查看>>
好看的Ubuntu&Linux命令提示符
查看>>
我的友情链接
查看>>
Apache开启https
查看>>