摘要: CoreGraphics的功能非常强大,可以绘制各种图形;今天学习一下怎么绘制简单的点线面,记录学习。

一、导入coreGraphics.framework

二、绘制图形

1、绘制矩形

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

2、绘制椭圆

// 绘制椭圆
- (void)drawEllipse { // 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸
CGContextRef ctx = UIGraphicsGetCurrentContext(); // 定义其rect
CGRect rectangle = CGRectMake(, , , ); // 在当前路径下添加一个椭圆路径
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, , ); /**
* @brief 在当前点追加直线段,参数说明与上面一样
*/
CGContextAddLineToPoint(ctx, , );
CGContextAddLineToPoint(ctx, , ); // 关闭并终止当前路径的子路径,并在当前点和子路径的起点之间追加一条线
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, , ); /**
* @brief 在指定点追加二次贝塞尔曲线,通过控制点和结束点指定曲线。
* 关于曲线的点的控制见下图说明,图片来源苹果官方网站。参数按顺序说明
* @param c 当前图形
* @param cpx 曲线控制点的x坐标
* @param cpy 曲线控制点的y坐标
* @param x 指定点的x坐标值
* @param y 指定点的y坐标值
*
*/
CGContextAddQuadCurveToPoint(ctx, , , , ); // 设置图形的线宽
CGContextSetLineWidth(ctx, ); // 设置图形描边颜色
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, , , * M_PI, ); //绘制当前路径区域
CGContextFillPath(ctx);
}

6.画一条线

-(void)drawLine
{
CGContextRef context = UIGraphicsGetCurrentContext();
//画一条线
CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 0.5);//线条颜色
CGContextMoveToPoint(context, , );
CGContextAddLineToPoint(context, ,);
CGContextStrokePath(context);
}

三、在drawRect中调用

- (void)drawRect:(CGRect)rect {

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

效果如图:

转:http://my.oschina.net/joanfen/blog/150411

ios Quartz 各种绘制图形用法的更多相关文章

  1. IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

    // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affec ...

  2. Quartz 2D(常用API函数、绘制图形、点线模式)

    Quzrtz 2D 绘图的核心 API 是 CGContextRef ,它专门用于绘制各种图形. 绘制图形关键是两步: 1.获取 CGContextRef ; 2.调用 CGContextRef 的方 ...

  3. html5 canvas 笔记一(基本用法与绘制图形)

    <canvas> 元素 <canvas id="tutorial" width="150" height="150"> ...

  4. iOS - Quartz 2D 画板绘制

    1.绘制画板 1.1 绘制简单画板 PaintBoardView.h @interface PaintBoardView : UIView @end PaintBoardView.m @interfa ...

  5. iOS - Quartz 2D 二维绘图

    1.Quartz 2D 简介 Quartz 2D 属于 Core Graphics(所以大多数相关方法的都是以 CG 开头),是 iOS/Mac OSX 提供的在内核之上的强大的 2D 绘图引擎,并且 ...

  6. iPhone之Quartz 2D系列--图形上下文(2)(Graphics Contexts)

    以下几遍关于Quartz 2D博文都是转载自:http://www.cocoachina.com/bbs/u.php?action=topic&uid=38018 iPhone之Quartz ...

  7. Quartz 2D - 图形上下文(Graphics Contexts)

    一个Graphics Context表示一个绘制目标.它包含绘制系统用于完成绘制指令的绘制参数和设备相关信息.Graphics Context定义了基本的绘制属性,如颜色.裁减区域.线条宽度和样式信息 ...

  8. iOS 开发:绘制像素到屏幕

    转载:https://segmentfault.com/a/1190000000390012 译注:这篇文章虽然比较长,但是里面的内容还是很有价值的. 像素是如何绘制到屏幕上面的?把数据输出到屏幕的方 ...

  9. 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)

    目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...

随机推荐

  1. Entity Framework管理实体关系(二):管理一对二关系

    在上一篇文章中,简单的介绍了使用Fluent API如何管理一对一的实体关系,在这篇文章中,接着介绍Fluent API如何管理一对多的实体关系. 要在数据库中配置一对多关系,我们可以依赖EF约定,还 ...

  2. 微信小程序----map组件实现检索【定位位置】周边的POI

    效果图 实现方法 地图采用微信小程序提供的map组件: 周边的数据坐标点通过高德地图提供的API接口,获取定位位置的周边或者指定位置周边的数据. WXML <view class="m ...

  3. W/MessageQueue: Handler (android.os.Handler) {4241f8f8} sending message to a Handler on a dead thread

    缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的 稍微纤细一点儿的信息是: Handler (andro ...

  4. javascript删除字符串最后一个字符

    搜到很多无用的答案,这对新手来讲是很耗费时间的事情,我把正确的方法贴出来,以便有的新手不再踩这个坑. JavaScript slice() 方法 定义和用法 slice() 方法可提取字符串的某个部分 ...

  5. 对于表达式比较长的 for 语句和 if 语句

    对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去 掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c< ...

  6. (转)sqlite3使用中的常见问题

    1. 创建数据如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库. 2. 如何通过sqlite3.dll与sqlite3.def生 ...

  7. linux -- at命令

    在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...

  8. 【Java 线程的深入研究4】ThreadPoolExecutor运转机制详解

    hreadPoolExecutor机制 一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调 ...

  9. rdesktop连接远程windows

    $ info rdesktop   //看一下帮助信息吧$rdesktop 192.168.1.1 //打开了一个8位色彩的,$rdesktop -a 16 192.168.1.1 //这个是16位色 ...

  10. jQuery中return false,e.preventDefault(),e.stopPropagation()的区别

    e.stopPropagation()阻止事件冒泡 <head> <title></title> <script src="Scripts/jQue ...