文档章节

iOS学习6:CoreGraphics简单绘图

芳仔小脚丫
 芳仔小脚丫
发布于 2013/08/06 10:10
字数 952
阅读 13867
收藏 27

一、导入coreGraphics.framework

二、绘制图形

1、绘制矩形

// 绘制矩形
- (void)drawRectangle {

    // 定义矩形的rect
	CGRect rectangle = CGRectMake(100, 290, 120, 25);
    
    // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
	CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 在当前路径下添加一个矩形路径
	CGContextAddRect(ctx, rectangle);
    
    // 设置试图的当前填充色
	CGContextSetFillColorWithColor(ctx, [UIColor blackColor].CGColor);
    
    // 绘制当前路径区域
	CGContextFillPath(ctx);
}

2、绘制椭圆

// 绘制椭圆
- (void)drawEllipse {

    // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
	CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 定义其rect
	CGRect rectangle = CGRectMake(10, 100, 300, 280);
    
    // 在当前路径下添加一个椭圆路径
	CGContextAddEllipseInRect(ctx, rectangle);
    
    // 设置当前视图填充色
	CGContextSetFillColorWithColor(ctx, [UIColor orangeColor].CGColor);
    
    // 绘制当前路径区域
	CGContextFillPath(ctx);	
}

3、绘制三角形

// 绘制三角形
- (void)drawTriangle {

    // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
	CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 创建一个新的空图形路径。
	CGContextBeginPath(ctx);
    
    /** 
     *  @brief 在指定点开始一个新的子路径 参数按顺序说明
     * 
     *  @param c 当前图形
     *  @param x 指定点的x坐标值 
     *  @param y 指定点的y坐标值
     *
     */
	CGContextMoveToPoint(ctx, 160, 220);
    
    /** 
     *  @brief 在当前点追加直线段,参数说明与上面一样
     */
	CGContextAddLineToPoint(ctx, 190, 260);
	CGContextAddLineToPoint(ctx, 130, 260);
    
    // 关闭并终止当前路径的子路径,并在当前点和子路径的起点之间追加一条线
	CGContextClosePath(ctx);

    // 设置当前视图填充色
	CGContextSetFillColorWithColor(ctx, [UIColor blackColor].CGColor);
    
    // 绘制当前路径区域
	CGContextFillPath(ctx);
}

4、绘制曲线

// 绘制曲线
- (void)drawCurve {

    // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
	CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 创建一个新的空图形路径。
	CGContextBeginPath(ctx);
    
    /**
     *  @brief 在指定点开始一个新的子路径 参数按顺序说明
     *
     *  @param c 当前图形
     *  @param x 指定点的x坐标值
     *  @param y 指定点的y坐标值
     *
     */    
	CGContextMoveToPoint(ctx, 160, 100);
    
    /**
     *  @brief 在指定点追加二次贝塞尔曲线,通过控制点和结束点指定曲线。
     *         关于曲线的点的控制见下图说明,图片来源苹果官方网站。参数按顺序说明
     *  @param c   当前图形
     *  @param cpx 曲线控制点的x坐标
     *  @param cpy 曲线控制点的y坐标
     *  @param x   指定点的x坐标值
     *  @param y   指定点的y坐标值
     *
     */
	CGContextAddQuadCurveToPoint(ctx, 160, 50, 190, 50);
    
    // 设置图形的线宽
	CGContextSetLineWidth(ctx, 20);
    
    // 设置图形描边颜色
	CGContextSetStrokeColorWithColor(ctx, [UIColor brownColor].CGColor);
    
    // 根据当前路径,宽度及颜色绘制线
	CGContextStrokePath(ctx);		
}

曲线描绘示意图

5、绘制圆形

//以指定中心点绘制圆弧
- (void)drawCircleAtX:(float)x Y:(float)y {
    
    // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
	CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 创建一个新的空图形路径。
	CGContextSetFillColorWithColor(ctx, [UIColor blackColor].CGColor);
    
    /**
     *  @brief 在当前路径添加圆弧 参数按顺序说明
     *  
     *  @param c           当前图形
     *  @param x           圆弧的中心点坐标x
     *  @param y           曲线控制点的y坐标
     *  @param radius      指定点的x坐标值
     *  @param startAngle  弧的起点与正X轴的夹角,
     *  @param endAngle    弧的终点与正X轴的夹角
     *  @param clockwise   指定1创建一个顺时针的圆弧,或是指定0创建一个逆时针圆弧
     *
     */
	CGContextAddArc(ctx, x, y, 20, 0, 2 * M_PI, 1);
    
    //绘制当前路径区域
	CGContextFillPath(ctx);
}

三、在drawRect中调用

- (void)drawRect:(CGRect)rect {

    // 绘制椭圆
	[self drawEllipse];
    
    // 绘制三角
	[self drawTriangle];
    
    // 绘制矩形
	[self drawRectangle];
    
    // 绘制曲线
	[self drawCurve];
    
    // 绘制圆形
	[self drawCircleAtX:120 Y:170];

	[self drawCircleAtX:200 Y:170];
	
}

效果如图:

© 著作权归作者所有

芳仔小脚丫
粉丝 931
博文 83
码字总数 76301
作品 0
闵行
程序员
私信 提问
加载中

评论(13)

芳仔小脚丫
芳仔小脚丫

引用来自“lxw123”的评论

me too,有时间交流交流啊~

加群 130283564 备注一下就行了
贪吃飒
贪吃飒
me too,有时间交流交流啊~
芳仔小脚丫
芳仔小脚丫

引用来自“lxw123”的评论

张伟?不会是高博的吧?

是的。。
贪吃飒
贪吃飒
张伟?不会是高博的吧?
芳仔小脚丫
芳仔小脚丫

引用来自“wahtung”的评论

不知怎样实现用手触摸进行绘图呢?0

曾经看过关于手写签名的文章,绘制贝塞尔曲线什么的,但是没有尝试过,你可以去搜下
w
wahtung
不知怎样实现用手触摸进行绘图呢?0
hagoo
hagoo

引用来自“芳丫头”的评论

引用来自“黄爱武”的评论

引用来自“芳丫头”的评论

引用来自“黄爱武”的评论

学习了。

这个是张伟当时给我们讲过的那个例子,翻出来好好看了下

79那些东西我早就弄没了。

哈哈,后来发现他给我们讲的很多东西都很有用的,都准备抽空慢慢去看呢。都是好基础的东西。我当时存在网盘里了的,你要的话我发给你啊

求啊0
芳仔小脚丫
芳仔小脚丫

引用来自“sunlike”的评论

引用来自“黄爱武”的评论

引用来自“芳丫头”的评论

引用来自“黄爱武”的评论

学习了。

这个是张伟当时给我们讲过的那个例子,翻出来好好看了下

79那些东西我早就弄没了。

Who is Zhangwei ?

我以前的老师
sunlike
sunlike

引用来自“黄爱武”的评论

引用来自“芳丫头”的评论

引用来自“黄爱武”的评论

学习了。

这个是张伟当时给我们讲过的那个例子,翻出来好好看了下

79那些东西我早就弄没了。

Who is Zhangwei ?
芳仔小脚丫
芳仔小脚丫

引用来自“黄爱武”的评论

引用来自“芳丫头”的评论

引用来自“黄爱武”的评论

学习了。

这个是张伟当时给我们讲过的那个例子,翻出来好好看了下

79那些东西我早就弄没了。

哈哈,后来发现他给我们讲的很多东西都很有用的,都准备抽空慢慢去看呢。都是好基础的东西。我当时存在网盘里了的,你要的话我发给你啊
Flutter 对 iOS、Android(双端开发者)的快速理解(一)

原文链接 更多教程 如果你有移动端开发经验,无论你是iOS还是Android开发者,你都可以利用现有的知识快速理解Flutter开发。 本文会通过对比双端开发和Flutter中的差异来说明。 Flutter中用 ...

TryEnough
01/29
0
0
iOS的绘图机制-iOS,iPad,iPhone,Objective-c

嘿!我又回来了。 在前面我介绍了iOS的视图机制,我也提到了iOS的视图框框可以通过drawRect自己绘图,我也说过每个view的layer(CALayer)就像一个视图的投影,其实我们也可以来操作它定制一...

晨曦之光
2012/05/28
2.9K
0
使用 iOS OpenGL ES 实现长腿功能

本文介绍了如何使用 OpenGL ES 来实现长腿功能。学习这个例子可以加深我们对纹理渲染流程的理解。另外,还会着重介绍一下「渲染到纹理」这个新知识点。 警告: 本文属于进阶教程,阅读前请确...

雷曼同学
03/09
0
0
GPU vs CPU in iOS

一直以来,我们做产品的时候并没有特别的去考虑CPU/GPU的使用,最近为了提升可视化功能的性能,发现合理使用GPU也是一个可以好好研究的部分,这里总结一下一些有用的信息。 中央处理器 CPU ...

雨_树
2018/07/10
0
0
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

“旧城改造”的背后——银泰新零售阿里云解决方案(上)

相关免费课程《银泰新零售上云解决方案精讲》上线中 立足实战 讲透经典案例 助你快速理解新零售 第一节学习地址 第二节学习地址 传统线下商业体上云的案例 与其说银泰上云,倒不如说银泰“旧...

阿里云官方博客
20分钟前
0
0
记一次升级Oracle驱动引发的死锁

问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次“死锁(deadlock)”的问题,部分关键日志如下: Found one Java-level deadlock:...

ksfzhaohui
21分钟前
5
0
MySQL 中的 information_schema 数据库

欢迎查看原文 - 本博客仅记录 https://blog.csdn.net/kikajack/article/details/80065753 -- 是否开启bin_log日志: off为关闭-- show variables like 'log_%'; show variables like '......

莫库什勒
29分钟前
1
0
Random在高并发下的缺陷以及JUC对其的优化

Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了。但并不是每个人都知道...

编程SHA
34分钟前
0
0
T5大牛带你解析:如何实现分布式技术

1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案。 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓...

李红欧巴
46分钟前
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部