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. XML,dom4j和Java

    看了“罗辑思维”的节目,终于克服了自己的拖延症,开始动笔写这篇文章了. 写这篇文章的目的是把XML的解析,萃取和验证都尽量覆盖一下,存储以便日后备考,使用的包是dom4j,涉及语言是Java. dom ...

  2. XML❤你并不孤单

    XML不是已不成立的,它是慢慢发展起来的.由最初的GML发展到SGML再到HTML,最后有了是1998年发展起来的可扩展标记语言. 然而XML并非替换HTML的技术,两者的存在都十分重要. XML是一 ...

  3. C#基础视频教程5.2 如何编写简单的超级热键

    我们前面已经理解了如何使用官方的代码实现鼠标键盘的监控,其实还差一点,因为他的代码只能捕捉单个的按键,而其实我们要的是组合键.什么是组合键呢?比如我想定义同时按下WIN+C是去执行屏幕截图.这只要理解 ...

  4. Call to a member function select() on string错误

    Call to a member function select() on string错误 Call to a member function select() on array错误 我也是 Get ...

  5. 基于JUnit3.8的一个简单的测试程序

    实现一个简单的计算 注:目标类和测试类要放在同一包下, JUnit单元测试基础要点 目标类:Calculator.java package com.junit3_8; public class Cal ...

  6. Jquery重新学习之二[属性attr(),removeAttr(),prop(),removeProp()]

    1:属性.attr(name|pro|key,val|key,fn)与removeAttr(name) 1.1 .attr(name) 参数name为属性名称 <a id="my_hr ...

  7. ORACLE判断两个日期间隔几个工作日

      CreateTime--2017年9月7日17:14:56 Author:Marydon ORACLE判断两个日期间隔几个工作日 方法:使用存储过程 /** * 判断两个日期间隔几个工作日 */ ...

  8. 【Linux】more命令

    用途 more主要用于一页一页查看档案 全称 全称即为more 说明 空格键 :代表向下翻一页,也可以使用CTRL+F Enter :代表下翻一行 :f      :立刻显示出文件名以及目前显示的行数 ...

  9. Overlapped I/O模型深入分析(转)

    随笔 - 262  文章 - 0  评论 - 531  博客园  首页  新随笔  联系  管理  订阅  Overlapped I/O模型深入分析(转) 简述:    Overlapped I/O也 ...

  10. panel,dialog,window组件越界(超出范围)问题汇总

    参考地址 之前分别写过panel,dialog,window三个组件因为拖曳或者reSize造成组件越界而无法还原的问题,两篇文章分别针对拖曳和reSize给出了解决方案.不过根据朋友的反馈,reSi ...