2009-08-06 12 views
8

私はCGContextShowTextAtPointを使って画面にテキストを表示しているアプリに取り組んでいます。日本語の文字も表示したいが、CGContextShowTextAtPointは入力としてC文字列を取ります。だからどちらか)A)日本語の文字をCの文字列に変更するには?これができない場合は、B)画面に日本語文字を手動で印刷するにはどうすればいいですか?日本語の文字のためのIphone CGContextShowTextAtPoint

ありがとうございます。

答えて

5

CoreTextはあなたを助けることができる:

  1. CTFontGetGlyphsForCharacters(iOSの3.2以降)のグリフ
  2. CTFontDrawGlyphs
  3. にUnicode文字(iOSの4.2以降)CGContextにグリフを描画をマッピングします。

NB。 CGContextShowGlyphsはうまくいくはずですが、UniCharsをグリフに変換する方法が見つかりませんでした。

古代、あなたはこのためのUIKitを使用する必要があり、事前のiOS 3.2の答え

:そのhereの詳細。

[NSString drawAtPoint:...]をご覧ください。

このSO questionも便利です。

私は彼らがCoreGraphicのテキストで何を考えていたのか分かりません。無駄です。

+0

ありがとうございました! Docsを少し読んだら、NSAttributedStringクラスの行に沿って何かをコーディングしたように見えるので、私は今すべてのコードをそれに切り替えるべきだと思っています:( – kiyoshi

+0

あなたは歓迎ですps iPhoneにNSAttributeStringはありません、 NSLabelをチェックしてください。 –

+0

Core Graphicsのテキスト描画ルーチンは長い間Mac上で使用されていました。私はUnicodeサポートが一般的になる前に推測していますので、文字セットをサポートするだけで驚くことではありません。また、CGContextShowGlyphsAtPoint()でカスタム文字を印刷することもできますが、iPhone上でグリフを生成することは困難です。この投稿には例があります:http://www.gogo-robot.com/devblog/?p=5 –

1

私はCoreGraphicsで日本語の文字をうまく使うために長い時間を費やしていました。

最後に、私はUILabelsを使用してテキストを処理しました。私が必要とするすべてのCoreGraphicsのようなものは、変換&アニメーションのサポートを使用して複製でき、結局は結果のコードがはるかに簡単でした。

あなたの状況には適していないかもしれませんが、考慮する価値があります。私はイェンスEgebladによってCGFontGetGlyphsForUnicharsの再実装を使用してこの作業を取得することができました

3

:日本語フォントで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]); 
+1

Where GlyphDrawing.mmをダウンロードできますか?リンクが壊れています。 –

0

これは%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); 
関連する問題