2012-01-23 10 views
1

これはかなり基本的だと思います。それは、伝統的な英語のテキストと正常に動作しますが、私はロシアや他のキリル文字を渡すとき、テキストがごちゃ混ぜにすべて出てくるiPhoneでロシア文字を入力するとcStringが失敗する

float curpo = CGContextGetTextPosition(ref).x; 
    float newpo = 0; 
    float textw = 0; 

    const char *text = [userName cStringUsingEncoding:NSUTF8StringEncoding]; 
    CGContextSetTextDrawingMode(ref, kCGTextInvisible); 
    CGContextShowTextAtPoint (ref, 0, pos, text, strlen(text)); 
    newpo = CGContextGetTextPosition(ref).x; 
    textw = newpo - curpo; 

:私は私のためにファイルにテキストを書き込み、次のコードを持っています。これをどうすれば解決できますか?

答えて

2

textの各バイトについて、CGContextShowTextAtPoint()は、それをCGContextRefの現在のフォントのグリフにマップします。これはあなたが望むよりも低いレベルです。

任意の言語のグリフを含む文字列を描画するには、UIStringDrawing.hの文字列描画メソッドを使用します。このような何か:

UIGraphicsPushContext(context); 
[userName drawAtPoint:pos withFont:[UIFont systemFontOfSize:16]]; 
UIGraphicsPopContext(); 

あなたはより細かい粒度の制御が必要な場合は、その後、CTFramesetterCreateWithAttributedString経由CTFramesetterRefを(作成、CoreTextフレームを見て、あなたのNSStringのからCFAttributedStringを作成することができます)、それからCTFrameRefを作成し、 CTFrameDraw()を使用してコンテキストに描画します。

+0

正確に私が必要としたもの。ありがとうございました。 – mostlyharmless

関連する問題