【发布时间】:2011-01-20 03:56:00
【问题描述】:
在我的应用程序中,我试图沿路径呈现文本;这对大多数字符都很好,但对于日语(或任何非 mac-Roman)则不行。有人建议我使用 [NSString drawAtPoint] 在我的 CATiledLayer 中显示正确的字符;但是,它们会在大约 5 秒后消失。在这段时间里,我可以缩放图层并且它们可以正确缩放,但它们似乎不像文本的其余部分那样致力于 CATiledLayer。
在渲染之前,我会检查字符串并决定它们中的任何一个是否不可渲染。如果我遇到问题,我会改用 drawAtpoint:
if (!isFullyDisplayable)
{
CGContextShowGlyphsAtPoint(context, pt.x, pt.y, realGlyph, 1);
}
else {
// fall back on less flexible font rendering for difficult characters
NSString *b = [gv text];
NSString *c = [b substringWithRange:NSMakeRange(j,1)];
[c drawAtPoint:pt withFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0]];
}
有没有人知道为什么文本消失了?
一旦使用 drawAtPoint,我的调试输出就会被淹没:
<Error>: CGContextGetShouldSmoothFonts: invalid context
<Error>: CGContextSetFont: invalid context
<Error>: CGContextSetTextMatrix: invalid context
<Error>: CGContextSetFontSize: invalid context
<Error>: CGContextSetTextPosition: invalid context
<Error>: CGContextShowGlyphsWithAdvances: invalid context
所以我猜这与我的上下文管理有关,但我假设如果这与我使用 CGContextShowGlyphsAtPoint 位于同一个地方,它应该已经具有正确的上下文?
【问题讨论】:
标签: iphone cgcontext catiledlayer