2011-09-07 37 views
0

x和y是整数。iOS使用CGcontextshowtextatpoint为某些字体的文本绘制矩形

int theSize = [caption.text length]; 
CGContextShowTextAtPoint(context, x, y, [caption.text UTF8String], theSize); 

但是当我使用某些字体,字母显示为矩形:当我使用CGBitmapCreateContext发送自定义创建的上下文,然后用普通的字体使用它像ArialMT

下面的代码工作正常。于是,我就做什么其他堆栈溢出回答表明,这是使用CoreText:

// supposedly a solution to glyphs problem 
CGContextSaveGState(context); 
CGContextSetRGBFillColor(context, 0, 0, 0, .5); 
[caption.text drawAtPoint:CGPointMake(x, y) withFont:caption.font]; 
CGContextRestoreGState(context); 

但是,这只是给了我一个错误:9月7日十三点33分31秒...:CGContextShowGlyphsWithAdvances:无效的情况下为0x0

回答

0

矩形意味着字形在该字体中不可用。使用-drawAtPoint:withFont:将使用字体回退来使用其他字体绘制字形,但请注意,此不是核心文本,它只是UIStringDrawing。在任何情况下,这都会失败,因为-drawAtPoint:withFont:调用依赖于当前的UI图形上下文堆栈,但是您使用的是不在堆栈上的自定义上下文。使用UIGraphicsBeginImageContext[WithOptions]()UIGraphicsEndImageContext()创建并销毁您的CGContext,或者使用UIGraphicsPushContext()UIGraphicsPopContext()将您的上下文添加到堆栈并在之后再次删除。

另外,你可以真正开始使用CoreText,它使用显式上下文(就像CoreGraphics),但这将是更多的代码行。