CGContextRef使用简要教程

Graphics Context是图形上下文,也可以理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个画框.

CGContextRef功能强大,我们借助它可以画各种图形。开发过程中灵活运用这些技巧,可以帮助我们提供代码水平。

说到画图,我就立马想到:我的数学公式都快忘完了。

高中数学你还记得多少?

我记得我上学的时候,数学一直都很好。以至于在班里都不敢和别人吵吵闹闹。一吵吵闹闹,别人就会来一句:以为你数学好,就可以怎么样怎么样了是吧?说的我好无奈啊。

这么多年过去了,说句实话,高中时学的数学公式什么的,都忘记的差不多了。现在要去做高三的考题,估计比写代码还难。

作为一名程序员,数学好,一定是优势。就拿画图来说吧,如果你还清楚的记得那些公式,那么你就可以很随意地画出一些好看的图形出来。

接下来,我们来看看CGContextRef到底能实现些什么?

写文字

- (void)drawRect:(CGRect)rect
{
//获得当前画板
CGContextRef ctx = UIGraphicsGetCurrentContext();
//颜色
CGContextSetRGBStrokeColor(ctx, 0.2, 0.2, 0.2, 1.0);
//画线的宽度
CGContextSetLineWidth(ctx, 0.25);
//开始写字
[@"我是文字" drawInRect:CGRectMake(10, 10, 100, 30) withFont:font];
[super drawRect:rect];
}

这段代码就可以很漂亮的写出四个大字:我是文字。很容易理解,每句话都有注释。

画直线

- (void)drawRect:(CGRect)rect
{
//获得当前画板
CGContextRef ctx = UIGraphicsGetCurrentContext();
//颜色
CGContextSetRGBStrokeColor(ctx, 0.2, 0.2, 0.2, 1.0);
//画线的宽度
CGContextSetLineWidth(ctx, 0.25);
//顶部横线
CGContextMoveToPoint(ctx, 0, 10);
CGContextAddLineToPoint(ctx, self.bounds.size.width, 10);
CGContextStrokePath(ctx);
[super drawRect:rect];
}

画圆

- (void)drawRect:(CGRect)rect
{
//获得当前画板
CGContextRef ctx = UIGraphicsGetCurrentContext();
//颜色
CGContextSetRGBStrokeColor(ctx, 0.2, 0.2, 0.2, 1.0);
//画线的宽度
CGContextSetLineWidth(ctx, 0.25);
//void CGContextAddArc(CGContextRef c,CGFloat x, CGFloat y,CGFloat radius,CGFloat startAngle,CGFloat endAngle, int clockwise)1弧度=180°/π (≈57.3°) 度=弧度×180°/π 360°=360×π/180 =2π 弧度
// x,y为圆点坐标,radius半径,startAngle为开始的弧度,endAngle为 结束的弧度,clockwise 0为顺时针,1为逆时针。
CGContextAddArc(ctx, 100, 20, 20, 0, 2*M_PI, 0); //添加一个圆
CGContextDrawPath(ctx, kCGPathStroke); //绘制路径
[super drawRect:rect];
}

这个画圆的公式你还记得吗?你还知道M_PI是什么吗?等于多少吗?赶紧脑补一下吧!

画矩形

- (void)drawRect:(CGRect)rect
{
//获得当前画板
CGContextRef ctx = UIGraphicsGetCurrentContext();
//颜色
CGContextSetRGBStrokeColor(ctx, 0.2, 0.2, 0.2, 1.0);
//画线的宽度
CGContextSetLineWidth(ctx, 0.25);
CGContextAddRect(ctx, CGRectMake(2, 2, 30, 30));
CGContextStrokePath(ctx);
[super drawRect:rect];
}

图形千千万,万变不离其宗。更多画图方法,期待你的探索。

作者李刚是刚刚在线(www.superqq.com)站长,百度百家专栏作者 iOS工程师非著名自媒体,微信公众号iOS开发:iOSDevTip运营者

本文出处刚刚在线:http://www.superqq.com/blog/2015/06/29/cgcontextrefshi-yong-jian-yao-jiao-cheng/

CGContextRef使用简要教程的更多相关文章

  1. Mac Java Idea 下面Git配置简要教程

    Mac Java Idea 配置简要教程(Sunplay) 1.找到git路径 终端输入:which git 2.在idea的设置git路径 3.测试Git的效果 测试Git成功的效果

  2. HTML5 CSS3简要教程

    Web 设计师可以使用HTML4和CSS2.1完成一些很酷的东西.我们可以在不使用陈旧的基于table布局的基础上完成文档逻辑结构并创建内容丰富的网站.我们可以在不使用内联<font>和& ...

  3. yii2-admin 插件使用简要教程

    yii2的访问权限默认是由自带的rbac组件在管理,需要自己编写相应的规则去实现权限管理,无图形界面.yii2-admin是将rbac的管理可视化,只需要点几下鼠标就能设置好简单的规则. 本教程中软件 ...

  4. MPI搭建简要教程

    具体安装部署,能够參考 http://www.ibm.com/developerworks/cn/linux/l-cn-mpich2/,该教程将的比較具体. 注:不同版本号的 MPICH2对编译器以及 ...

  5. Git 简要教程

    Git是一个管理系统,管理版本,管理内容(CMS),管理工作等. Git主要还是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 工作流程是这样的: 克隆 Git 资源作为工作目录 ...

  6. XCL-Charts图表库简要教程及常见问题

    这个Andriod图表库项目从开始至现在,热情消耗几近殆尽.还好已基本实现我想做的那些东西.趁还剩下点兴趣,把一些点非常简单的归纳一下. 所支持的图表类型: 基类                   ...

  7. MQTT协议学习研究 & Mosquitto简要教程(安装和使用)

    若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...

  8. MQTT的学习研究(十七)Mosquitto简要教程(安装&使用)

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案.本文的主旨在于记录M ...

  9. TensorFlow简要教程及线性回归算法示例

    TensorFlow是谷歌推出的深度学习平台,目前在各大深度学习平台中使用的最广泛. 一.安装命令 pip3 install -U tensorflow --default-timeout=1800 ...

随机推荐

  1. 谈mvc开发中gzip压缩的应用

    压缩view的内容,可加过滤器 public class GzipFilter : ActionFilterAttribute     {         public override void O ...

  2. [Python] Create a Django project in Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50158239 From: http://blog.csdn.net/u013088062 ...

  3. DirectWrite文字排版——字符串去尾

    DirectWrite是 DirectX 家族中专门用来做文本处理的部分,主要配合Direct2D进行渲染工作. 一.字符串去尾介绍 在文字渲染中,不免会遇到字符串去尾的需求.字符串去尾指的是:当字符 ...

  4. IOS开发UI基础UIView

    主要介绍下UIView得基本概念和一些属性的介绍至于属性的用户后面会由详细的介绍 -.UIView基本概念 1.什么是控件? 屏幕上所有的UI元素都叫做控件 (也有很多书中叫做视图 组件) 比如 按钮 ...

  5. 0506团队项目-Scrum 项目1.0

    题目 1.应用NABCD模型,分析你们初步选定的项目,充分说明你们选题的理由. 2.录制为演说视频,上传到视频网站,并把链接发到团队博客上. 团队项目选题 金融工具:复利计算与投资记录项目继续升级,开 ...

  6. Sql Server来龙去脉系列之四 数据库和文件

        在讨论数据库之前我们先要明白一个问题:什么是数据库?     数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...

  7. <!DOCTYPE> 的理解

    [[ from <!DOCTYPE> 标签的深入理解 ]] 前言: 今天被问道“有没有仔细了解过<!DOCTYPE>标签?”,愣了一下,因为一开始在W3cschool上看到过建 ...

  8. 在GridView列表中使用图片显示记录是否包含附件

    在我的前面很多文章中,都介绍过通用附件模块的管理,本篇随笔主要介绍在一些应用模块中的列表展示中,包含附件的记录,在GridView列表界面中使用图标来快速显示是否有附件的情况. 1.通用附件模块的应用 ...

  9. 用javascript去掉字符串空格的办法

    今天遇到了以关于JavaScript 中怎么去掉 字符串中前后两段的空格 ,我只好向就得js中也后Trim() 函数,后来试试了不 行,就网上找了下解决方法,其中用到了正则表达式 ,整理了下: < ...

  10. 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式

    我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...