ios 图形与动画学习笔记 构造路径(CGPathCreateMutable)
一系列点放在一起,构成了一个形状。一系列的形状放在一起,构成了一个路径。

/*

路径属于我们正在绘制他们的上下文。路径没有边界(Boundary)或特定的形状,不想我们使用路径绘制出来的形状。

但路径没有边界框(Bounding boxes). 此处,Boundary与Bounding boxes完全不一样。

边界显示你在画布上哪些不可以用来绘画,而路径的边界框是包含了所有路径的形状、点和其他已经绘制的对象的最小矩形。

使用路径创建步骤:创建路径的方法返回一个路径的句柄,可以在绘制图形的使用就可以把句柄作为传递给core Graphics。

当创建路径之后,可以向它添加不同的点、线条和形状,之后绘制图形。

1、CGPathCreateMutable 函数

创建一个CGMutablePathRef 的可变路径,并返回其句柄。

2、CGPathMoveToPoint 过程

在路径上移动当前画笔的位置到一个点,这个点由CGPoint 类型的参数指定。

3、CGPathAddLineToPoint 过程

从当前的画笔位置向指定位置(同样由CGPoint类型的值指定)绘制线段

4、CGContextAddPath 过程

添加一个由句柄指定的路径的图形上下文,准备用于绘图

5、CGContextDrawPath 过程

在图形上下文中绘制给出的路径。

6、CGPathRelease 过程

释放为路径句柄分配的内存。

7、CGPathAddRect 过程

向路径添加一个矩形。矩形的边界由一个CGRect 结构体指定。

*/

/*

*创建一个新的可变路径(CGPathCreateMutable),把该路径加到你的图形上下文(CGContextAddPath)

*并把它绘制到图形上下文中(CGContextDrawPath)

*/

具体代码:

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

// Drawing code

/*

*创建一个新的可变路径(CGPathCreateMutable),把该路径加到你的图形上下文(CGContextAddPath)

*并把它绘制到图形上下文中(CGContextDrawPath)

*/

/* Create the path */

CGMutablePathRef path = CGPathCreateMutable();

/* How big is our screen? We want the X to cover the whole screen */

CGRect screenBounds = [[UIScreen mainScreen] bounds];

/* Start from top-left */

CGPathMoveToPoint(path, NULL,screenBounds.origin.x, screenBounds.origin.y);

/* Draw a line from top-left to bottom-right of the screen */

CGPathAddLineToPoint(path, NULL,screenBounds.size.width, screenBounds.size.height);

/* Start another line from top-right */

CGPathMoveToPoint(path, NULL,screenBounds.size.width, screenBounds.origin.y);

/* Draw a line from top-right to bottom-left */

CGPathAddLineToPoint(path, NULL,screenBounds.origin.x, screenBounds.size.height);

/* Get the context that the path has to be drawn on */

CGContextRef currentContext = UIGraphicsGetCurrentContext();

/* Add the path to the context so we can draw it later */

CGContextAddPath(currentContext, path);

/* Set the blue color as the stroke color */

[[UIColor blueColor] setStroke];

/* Draw the path with stroke color */

CGContextDrawPath(currentContext, kCGPathStroke);

/* Finally release the path object */

CGPathRelease(path);

/*

*传入CGPathMoveToPoint等过程的NULL参数代表一个既定的变换,在给定的路径绘制线条时可以使用此变换。

*/

}

转自:http://www.wahenzan.com/a/mdev/ios/2015/0130/1522.html

CGPathCreateMutable的更多相关文章

  1. iOS开发系列--打造自己的“美图秀秀”

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  2. iOS之绘制虚线

    /*   ** lineFrame:     虚线的 frame   ** length:        虚线中短线的宽度   ** spacing:       虚线中短线之间的间距   ** co ...

  3. iOS绘制收益柱状图

    项目需求,参考了其他绘图demo,自己绘制出来了,不过代码改得有点乱,添加了很多变量,时间关系没用太合适的命名,逻辑处理也没进行优化. 看看效果图(虚线区域都是画的,其他区域添加的都是控件),附上源码 ...

  4. Quartz2D内存管理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #239619 } p.p2 ...

  5. 4.1/4.2 多线程进阶篇<上>(Pthread & NSThread)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Githubhttps://github.com/shorfng ...

  6. iOS CoreAnimation详解(一) 有关Layer的动画

    以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...

  7. iOS CALayer应用详解(2)

    参考博客:http://blog.csdn.net/hello_hwc?viewmode=list 如果你对CALayer 还没有一个清晰的理解,欢迎看一下前面的博客: http://www.cnbl ...

  8. iOS CALayer应用详解

    跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础,  L ...

  9. iOS开发小技巧 -- tableView-section圆角边框解决方案

    [iOS开发]tableView-section圆角边框解决方案 tableView圆角边框解决方案 iOS 7之前,图下圆角边框很容易设置 iOS 7之后,tableviewcell的风格不再是圆角 ...

随机推荐

  1. jquery动态添加删除div--事件绑定,对象克隆

    我想做一个可以动态添加删除div的功能.中间遇到一个问题,最后在manong123.com开发文摘 版主的热心帮助下解答了(答案在最后) 使用到的jquery方法和思想就是:事件的绑定和销毁(unbi ...

  2. JavaScript:避免代码的重复执行

    我喜欢到一些大型网站上去翻阅它们的原代码,期望能找到一些可以应用到自己的代码中的模式,或发现一些之前从未听说过的工具和技巧.可是,在我查看这些大型网站的源代码时,经常会发现一个问题,那就是重复的代码执 ...

  3. SSIS无法在unicode和非unicode 字符串数据类型之间转换

    场景:SSIS从oracle抽到sqlserver,一个表对表到数据仓库ODS层的抽取,没有任何逻辑结果遇到问题: SSIS无法在unicode和非unicode 字符串数据类型之间转换 如下图2个字 ...

  4. 用php编写我的第一段代码:hello world

    一.php环境的搭建 在编写php前,先搭建php环境,我选择了一站式安装软件WampServer,WampServer的下载地址:http://www.wampserver.com/ WampSer ...

  5. iOS 本地通知 操作

    iOS 本地通知 操作 1:配置通知:然后退出程序: UILocalNotification *localNotif = [[UILocalNotification alloc] init]; loc ...

  6. 算法笔记_155:算法提高 概率计算(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...

  7. 算法笔记_044:表达式计算求值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...

  8. Python dict的特点

    dict的特点 1:查找速度快 2:浪费空间 3:key不可以重复,且不可变 4:数据无序排放 dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样.而list的 ...

  9. windows 设置定时锁屏

      设置间隔指定时间电脑自动锁屏 CreateTime--2017年7月3日10:16:14Author:Marydon 参考地址:电脑爱好者杂志 举例:实现每间隔45分钟,电脑自动锁屏 实现思路: ...

  10. 配置tomcat的session共享

    可通过下面方法限制一个用户访问一个服务器之后就只在该服务器上操作. 请求负载过程中会话信息不能丢失.那么在多个tomcat中session需要共享. 配置tomcat的session共享可以有三种解决 ...