在屏幕上绘制文字和图片

一.基本知识

在程序中我们可能有需要在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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值