美文网首页iOS之家iOS开发常用知识点
Core Graphics-绘图使用介绍

Core Graphics-绘图使用介绍

作者: 小小土豆dev | 来源:发表于2016-09-19 10:19 被阅读1627次

iOS系统本身提供了两套绘图的框架,即UIBezierPath 和 Core Graphics。而前者所属UIKit,其实是对Core Graphics框架关于path的进一步封装,所以使用起来比较简单。但是毕竟Core Graphics更接近底层,所以它更加强大。

CoreGraphics,也称为Quartz 2D 是UIKit下的主要绘图系统,频繁的用于绘制自定义视图。Core Graphics是高度集成于UIView和其他UIKit部分的。Core Graphics数据结构和函数可以通过前缀CG来识别。

由于像素是依赖于目标的,所以2D绘图并不能操作单独的像素,我们可以从上下文(Context)读取它。所以我们在绘制之前需要通过

CGContextRef ctx = UIGraphicsGetCurrentContext()

获取当前推入堆栈的图形,相当于你所要绘制图形的图纸,然后绘图就好比在画布上拿着画笔机械的进行画画,通过制定不同的参数来进行不同的绘制。

画完之后我们需要通过

CGContextSetFillColorWithColor(CGContextRef c, CGColorRef color)

CGContextFillPath(CGContextRef c)

来填充颜色并完成最后的绘制。

1.绘图需要 CGContextRef

CGContextRef即图形上下文。可以这么理解,我们绘图是需要一个载体或者说输出目标,它用来显示绘图信息,并且决定绘制的东西输出到哪个地方。可以形象的比喻context就像一个“画板”,我们得把图形绘制到这个画板上。所以,绘图必须要先有context。

2.怎么拿到context?

第一种方法是利用cocoa为你生成的图形上下文。当你子类化了一个UIView并实现了自己的drawRect:方法后,一旦drawRect:方法被调用,Cocoa就会为你创建一个图形上下文,此时你对图形上下文的所有绘图操作都会显示在UIView上。

第二种方法就是创建一个图片类型的上下文。调用UIGraphicsBeginImageContextWithOptions函数就可获得用来处理图片的图形上下文。利用该上下文,你就可以在其上进行绘图,并生成图片。调用UIGraphicsGetImageFromCurrentImageContext函数可从当前上下文中获取一个UIImage对象。记住在你所有的绘图操作后别忘了调用UIGraphicsEndImageContext函数关闭图形上下文。

3.注意

并不是说一提到绘图,就一定得重写drawRect方法,只是因为通常情况下我们一般采用在drawRect方法里获取context这种方式。

4.drawRect方法什么时候触发

当view第一次显示到屏幕上时;

当调用view的setNeedsDisplay或者setNeedsDisplayInRect:方法时。

简言之:

重写UIView的drawRect方法,在该方法里便可得到context;

调用UIGraphicsBeginImageContextWithOptions方法得到context;


代码部分

一:绘制直线

//获取上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//设置直线宽度

CGContextSetLineWidth(context,3.0f);

//设置画笔颜色

CGContextSetStrokeColorWithColor(context, [[UIColorredColor]CGColor]);

//设置起始点和终点

CGContextMoveToPoint(context,30,30);

CGContextAddLineToPoint(context,150,150);

//绘制直线

CGContextStrokePath(context);

二:绘制三角形

//获取上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//设置直线宽度

CGContextSetLineWidth(context,3.0f);

//设置画笔颜色

CGContextSetStrokeColorWithColor(context, [[UIColoryellowColor]CGColor]);

//设置三角形的三个点,原理就是绘制直线

CGContextMoveToPoint(context,30,30);

CGContextAddLineToPoint(context,150,50);

CGContextAddLineToPoint(context,20,80);

CGContextAddLineToPoint(context,30,30);

//绘制路径

CGContextStrokePath(context);

三:绘制圆形

//获取上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//设置直线宽度

CGContextSetLineWidth(context,5.0f);

//设置画笔颜色

CGContextSetStrokeColorWithColor(context, [[UIColoryellowColor]CGColor]);

//设置背景填充颜色

CGContextSetFillColorWithColor(context, [[UIColorblueColor]CGColor]);

//设置绘制圆形的区域

CGContextAddEllipseInRect(context,CGRectMake(40,40,120,120));

//绘制路径

CGContextFillPath(context);

四:绘制方形

//上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//设置画笔直线宽度

CGContextSetLineWidth(context,2.0f);

//设置画笔颜色

CGContextSetStrokeColorWithColor(context, [[UIColorwhiteColor]CGColor]);

//设置背景填充色

CGContextSetFillColorWithColor(context, [[UIColoryellowColor]CGColor]);

//设置绘制方形区域

CGContextAddRect(context,CGRectMake(30,30,150,150));

//绘制路径

CGContextFillPath(context);

六:直接用UIView方法在view上绘制文字

//绘制的文字的内容

NSString*text =@"钓鱼岛是中国的!!";

//设置文字的大小

UIFont*font = [UIFontboldSystemFontOfSize:28];

//设置绘图位置

CGRecttextRect;

textRect.size= [textsizeWithFont:font];

textRect.origin.x=30;

textRect.origin.y=80;

[[UIColorblackColor]setFill];

//在view上绘制文字

[textdrawInRect:textRectwithFont:font];

七:用Quartz2D方式绘制文字

//获取绘图上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//设置绘制的文字

char*name ="right!";

//选择绘制的文字(参数:上下文、字体、大小、转码方式)

CGContextSelectFont(context,"Helvetica",0.5f,kCGEncodingMacRoman);

//设置文字绘制方式(描边、填充、描边填充)

CGContextSetTextDrawingMode(context,kCGTextFillStroke);

//设置画笔和填充颜色

CGContextSetStrokeColorWithColor(context, [[UIColorredColor]CGColor]);

CGContextSetFillColorWithColor(context, [[UIColoryellowColor]CGColor]);

//绘制文字

CGContextShowTextAtPoint(context,50,250, name,strlen(name));

八:绘制图片

方式1:UIImage自带方式

UIImage*img1 = [UIImageimageNamed:@"nba-1.png"];

[img1drawAtPoint:CGPointMake(30,30)];

方式2:Quartz2D方式

//获取上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//绘制的图片

UIImage*img2 = [UIImageimageNamed:@"nba.png"];

//使用Quarzt2D绘制的图片是倒置的,使用下方法设置坐标原点和显示比例来改变坐标系

CGContextTranslateCTM(context,0.0f,self.frame.size.height);

CGContextScaleCTM(context,1.0,-1.0);

//在上下文绘制图片

CGContextDrawImage(context,CGRectMake(220,130, img2.size.width, img2.size.height), [img2CGImage]);

下载本文代码

工程截图

相关文章

  • Core Graphics-绘图使用介绍

    iOS系统本身提供了两套绘图的框架,即UIBezierPath 和 Core Graphics。而前者所属UIKi...

  • iOS绘图

    介绍### 说到iOS的绘图肯定就是Core Graphics。 Core Graphics Framework是...

  • iOS 札记2:Core Graphics小记

    导语:Core Graphics是iOS和Mac OS X的2D绘图引擎,本文简单介绍Core Graphics绘...

  • iOS 中各种图形的绘制

    绘图我们要用到Core Graphics框架,那么什么是Core Graphics框架?首先我们来介绍一下。 一、...

  • 绘图方面总结

    学习绘图教程的总结 使用框架:Core Graphics FrameWork iOS支持两套图形API族:Core...

  • iOS绘图

    core graphics绘图 NSSet是无序的 NSSet使用NSEnumerator遍历 NSSet any...

  • 绘图

    IOS中绘图的方式介绍 IOS中貌似绘图的方式还挺多的,有 Core Graphics/QuartZ 2D UIK...

  • iOS绘图 - 基础篇

    本篇DEMO在iOS中进行绘图,不管你是否了解,基本上就是使用的Core Graphics。Core Graphi...

  • iOS绘图功能(一)

    不同的绘图系统### iOS主要的绘图系统有UIKit,Core Graphics(Quartz), Core A...

  • 感受Core Graphics的真实肉体--在开发中的运用

    前言 Core Graphics是一套基于C的API框架,使用了Quartz作为绘图引擎,作为矢量绘图框架,它功能...

网友评论

本文标题:Core Graphics-绘图使用介绍

本文链接:https://www.haomeiwen.com/subject/qpsgettx.html