目录
在程序中我们可能有需要在iPhone屏幕上绘制线段、图形等,比如类似地图应用程序,我们主要就需要绘制很多的道路线段。常用的线段、图形等的绘制我们可以使用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);
}