您的位置:首页 > 其它

iPhone Quartz2D 绘图及绘制文字简介

2012-03-26 09:57 411 查看
Iphone Quartz2D 绘图及绘制文字简介

一.基本知识

在程序中我们可能有需要在IPhone屏幕上绘制线段、图形等,比如类似地图APP,我们主要就需要绘制很多的道路线段。常用的线段、图形等的绘制我们可以使用Quartz2D库提供的绘制线段和各种图形API来完成。这里我们主要介绍一下如何在屏幕上绘制文字和图片,方法分别有两种,文字可以使用NSString(UIStringDrawing)的方式实现,图片可以用UIImage(DrawingImages)的方式实现;同时文字和图片的绘制也可以用Quartz2D提供的API实现。

二.具体介绍

1.文字的绘制

(1)方法1

在UIStringDrawing.h头文件中提供了在屏幕上绘制文字的函数,根据不同的参数有不同函数形式,具体可以参考NSString UIKit Additions Reference。这里主要介绍两个函数形式。

- (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font

在屏幕上特定的位置以指定的字体绘制单行的文本。(附:iPhone坐标系的原点为屏幕左上角,向右为x坐标轴正方向,向下为y坐标轴正方向)

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font

这个函数是在屏幕上指定的区域内绘制单行的文本。

代码例子:

-(void) drawTextByString:(NSString *)drawText thePoisition:(CGPoint)point

{

//方式一

[drawText drawAtPoint:point withFont:[UIFont systemFontOfSize:FontSize]];

}

(2)方法2

Quartz2D提供的文字绘制方法复杂一些,需要并可以设置更多的参数,同时也可以对绘制的文字有更多的控制,比如对文字进行一定角度的旋转等。

void CGContextSelectFont (

CGContextRef c,

const char *name,

CGFloat size,

CGTextEncoding textEncoding

);

选择绘制的字体,第一个参数c为绘制的图形上下文,可以通过CGContextRef context = UIGraphicsGetCurrentContext();方式获得,第二个参数name为字体的名字,第三个参数size为字体的大小,第四个参数textEncoding为字体的编码。

void CGContextSetTextDrawingMode (

CGContextRef c,

CGTextDrawingMode mode

);

设置文字的绘制方式,第二个参数代表绘制的模式,可以为kCGTextFill(填充),kCGTextStroke(描边)或kCGTextFillStroke(即填充又描边)。

void CGContextSetTextMatrix (

CGContextRef c,

CGAffineTransform t

);

设置文字变换矩阵,可以在这里给出文字平移,缩放或者旋转变换的矩阵,使文字进行相应的变换。

void CGContextShowTextAtPoint (

CGContextRef c,

CGFloat x,

CGFloat y,

const char *string,

size_t length

);

在给定的位置处绘制文字。前面都是对文字的绘制进行参数设置,设置好后就可以调用这个函数进行绘制。参数依次为绘制的图形上下文,位置的x和y坐标,需要绘制的文字和其长度。(注意:这里的类型是C的const char *,而不是Objective-C的NSString类型)

代码例子:

-(void) drawTextByQuartz:(CGContextRef)context theText:(const char*)drawtext thePoisition:(CGPoint)point rotateAngle:(float)angle

{

//方式二

CGContextSelectFont(context, "Helvetica", FontSize, kCGEncodingMacRoman);

CGContextSetTextDrawingMode(context, kCGTextFill);

//可以有更多的控制方式,比如旋转字体

CGAffineTransform myTextTransform =  CGAffineTransformMakeRotation(radians (angle));

CGContextSetTextMatrix (context, myTextTransform);

CGContextShowTextAtPoint(context, point.x, point.y, drawtext, strlen(drawtext));

}


2.图片的绘制

(1)方法1

UIImage中提供了在屏幕上绘制图片的函数,主要有两种形式。

- (void)drawAtPoint:(CGPoint)point

在指定的位置绘制图片。

- (void)drawInRect:(CGRect)rect

在指定的区域绘制图片,并根据区域的大小对图片进行缩放。

代码例子:

-(void) drawPicByImage:(UIImage *)theImage theLocation:(CGPoint)point

{

//方式一

[theImage drawAtPoint:point];

}

-(void) drawPicByImage:(UIImage *)theImage theRect:(CGRect)rect

{

//方式一

[theImage drawInRect:rect];

}

(2)方法2

Quartz2D提供和图片绘制函数和UIImage的类似。

void CGContextDrawImage (

CGContextRef c,

CGRect rect,

CGImageRef image

);

在指定的区域里绘制一幅图片。

代码例子:

-(void) drawPicByQuartz:(CGContextRef)context thePic:(UIImage *)theImage theLocation:(CGRect)rect

{

//方式二

CGContextDrawImage(context, rect, theImage.CGImage);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: