我正在使用我使用CGContextShowTextAtPoint
在屏幕上顯示文字的應用程序。我還想顯示日文字符,但CGContextShowTextAtPoint
需要輸入一個C字符串。所以要麼A)如何將日文字符更改爲C字符串?如果這是不可能的,B)如何手動將日文字符打印到屏幕上(在drawRect方法中)。Iphone CGContextShowTextAtPoint日文字符
在此先感謝。
我正在使用我使用CGContextShowTextAtPoint
在屏幕上顯示文字的應用程序。我還想顯示日文字符,但CGContextShowTextAtPoint
需要輸入一個C字符串。所以要麼A)如何將日文字符更改爲C字符串?如果這是不可能的,B)如何手動將日文字符打印到屏幕上(在drawRect方法中)。Iphone CGContextShowTextAtPoint日文字符
在此先感謝。
CoreText可以幫助你:
CTFontGetGlyphsForCharacters
(iOS 3.2起)映射Unicode字符到字形CTFontDrawGlyphs
(iOS 4.2的起)繪製的字形變成CGContext上。NB。 CGContextShowGlyphs
應該可以工作,但我從來沒有找到方法將我的UniChars轉換爲字形。更多關於該here:
古代,前期的iOS 3.2的答案
你需要使用的UIKit這一點。
檢出[NSString drawAtPoint:...]
開始。
這個SO question也很有用。
我不知道他們在用CoreGraphic文本的東西在想什麼,它沒用。
爲了什麼是值得的,我花了很長時間試圖讓日本人在CoreGraphics中很好地工作,並且不喜歡它離開我的地方。
最後我切換到使用UILabels處理文本。我需要的所有類似CoreGraphics的東西都可以使用動畫支持進行復制,最終得到的代碼更加簡單。
它可能不適合您的情況,但值得考慮。
我能夠通過使用CGFontGetGlyphsForUnichars的重新實現由延Egeblad得到這個工作:
// 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);
然後你:GlyphDrawing.mm
在日文字體從應用程序包的OTF文件先裝可以將您的unichar文本轉換爲字形並繪製它們:
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]);
Where我可以下載GlyphDrawing.mm嗎?鏈接被破壞。 – 2013-07-05 04:46:19
這可能會幫助您%topic starter%。感謝Rhythmic 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);
謝謝:)!在閱讀了Docs之後,我似乎已經沿着NSAttributedString類的代碼編寫了一些東西,所以我想現在我應該將所有代碼切換到: – kiyoshi 2009-08-06 08:52:48
不用客氣。ps iPhone上沒有NSAttributeString,所以看看NSLabel。 – 2009-08-06 09:01:19
核心圖形文本繪圖程序已經在Mac上存在了很長一段時間,在Unicode支持變得很普遍之前我猜測,所以他們只支持他們所做的字符集並不奇怪。您也可以使用CGContextShowGlyphsAtPoint()來打印自定義字符,但挑戰是在iPhone上生成字形。這篇文章有一個例子:http://www.gogo-robot.com/devblog/?p=5 – 2009-08-06 13:08:38