我正在开发一个正在使用的应用程序 CGContextShowTextAtPoint 在屏幕上显示文本。我也想显示日语字符,但是 CGContextShowTextAtPoint 将 C 字符串作为输入。那么 A) 如何将日语字符转换为 C 字符串?如果这是不可能的,B)如何手动将日语字符打印到屏幕上(在drawRect方法内)。

提前致谢。

有帮助吗?

解决方案

CoreText 可以帮助您:

  1. CTFontGetGlyphsForCharacters (iOS 3.2 及以上)将 Unicode 字符映射到字形
  2. CTFontDrawGlyphs (iOS 4.2 及以上)将字形绘制到 CGContext 中。

注意。 CGContextShowGlyphs 应该可以,但我从未找到将 UniChars 转换为字形的方法。更多相关内容 这里:

iOS 3.2 之前的古老答案

为此,您需要使用 UIKit。

查看 [NSString drawAtPoint:...] 开始。

那么问题 也很有用。

我不知道他们对 CoreGraphic 文本的想法是什么,它没有用。

其他提示

我是能够通过使用延Egeblad CGFontGetGlyphsForUnichars的重新实现得到这个工作: GlyphDrawing.mm

在日语字体首先负载作为从应用程序包的文件OTF:

// Load font file from otf file
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"HStdNW8" ofType:@"otf"];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
CGFontRef _cgFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);

然后您可以将单字符文本转换为字形,并吸引他们:

NSString *text = @"日本語"
CGContextSetFont(context, _cgFont);
CGContextSetFontSize(context, 12);
CGGlyph textGlyphs[[text length]];

unichar textChars[[text length]];
for(int i = 0; i < [text length]; i++) {
    textChars[i] = [text characterAtIndex:i];
}
CMFontGetGlyphsForUnichars(_cgFont, textChars, textGlyphs, [text length]);
CGContextShowGlyphsAtPoint(context, xCoord, yCoord, textGlyphs, [text length]);

有关它的价值,我花了很长时间试图让日本字符CoreGraphics在很好地工作,并没有像它给我留下了。

在最后我切换到使用UILabels来处理文本。所有CoreGraphics中一样的东西我需要可以使用变换&动画支持被复制,并且在最后所得到的码要简单得多。

这可能不适合您的情况,但它是值得考虑的。

这也许可以帮助您%专题首发%。由于艺术Fistman伟大的意见!

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSelectFont (context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize, kCGEncodingMacRoman);
    CGContextSetCharacterSpacing(context, characterSpacing);
    CGContextSetFillColorWithColor(context, [self.textColor CGColor]);
    CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f );
    CGContextSetTextMatrix (context, myTextTransform);

    CGGlyph glyphs[self.text.length];
    CTFontRef fontRef = CTFontCreateWithName((CFStringRef)self.font.fontName, self.font.pointSize, NULL);
    CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[self.text cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, self.text.length);
    float centeredY = (self.font.pointSize + (self.frame.size.height- self.font.pointSize)/2)-2;
    CGContextShowGlyphsAtPoint(context, rect.origin.x, centeredY, (const CGGlyph *)glyphs, self.text.length);
    CFRelease(fontRef);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top