7

を使用して「無限」記号を表示したい

CGContextSelectFont(context, "HelveticaNeue", textSize, kCGEncodingMacRoman);    
CGContextShowTextAtPoint(context, myCenter.x, myCenter.y + textHeight, [sName     cStringUsingEncoding:NSMacOSRomanStringEncoding], [sName length]); 

正方形のボックスまたは円として表示されます。この記号は 10 進数で 176、16 進数では 221E であることがわかりました。私は自分のフォントとして Helvetica を使用していますが、他のフォントを試してみましたがうまくいきませんでした。これは私が使用しているエンコーディングに問題がありますか?

4

4 に答える 4

12

CGContextSelectFont がサポートするのは MacRoman エンコーディングのみであることが判明しました。これは基本的に少数の文字セットしかありません。文字列に Unicode 文字を表示するには、CGSetFont または Cocoa 描画システムを使用する必要があります。CGSetFont では、とにかく Cocoa を使用して文字をグリフにマップし、CGContextShowGlyphsAtPoint を使用してグリフを描画する必要があります。本当に Unicode 文字を表示する必要がある場合は、これらの文字列を描画する他の方法を検討することをお勧めします。

このコードは基本的に無限大記号を表示します:

- (void)drawRect:(CGRect)rect {
    unichar inf = 0x221E; // infinity symbol
    NSString* sName = [[NSString alloc] initWithCharacters:&inf length:1];
    UIFont* font = [UIFont fontWithName:@"Helvetica" size:32.0];
    [sName drawInRect:CGRectMake(20, 20, 40, 40)
             withFont:font];
    [sName release];
}

また、iPhone (および Mac) には Helvetica Neue は実際には存在しないことに注意してください...その名前は、標準の Helvetica にマップされるだけです。iPhone で使用可能なフォントの詳細については、 http://daringfireball.net/misc/2007/07/iphone-osx-fontsの表を参照してください。

于 2008-11-09T00:51:22.723 に答える
2

-[NSString drawWithRect:] とそのいとこと一緒に CGContext 関数を引き続き使用できることに注意してください。たとえば、次のコードは、文字列 (このスレッドを開始した無限大記号を含む任意の文字を含むことができます) を 50% 不透明な黒で描画します。

CGContextSaveGState(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
[self.text drawInRect:targetRect withFont:self.font];
CGContextRestoreGState(context);
于 2008-12-25T08:01:11.860 に答える
1

モノタッチの答えは次のとおりです。

UIGraphics.PushContext (mBmpContext);
mBmpContext.SetRGBFillColor(1f,1f,1f,1f);
var font = UIFont.FromName ("Arial", 30);
using (var nsstr = new NSString ("äöü ÜÖÄ")){
   nsstr.DrawString (new PointF (10, 400), font);
}
UIGraphics.PopContext ()
于 2013-06-26T22:49:50.797 に答える
0

drawInRect:withFont: (in MonoTouch: DrawString (string, RectangelF, UIFont font) を避ける必要があります。これは、iPhoneOS 4.0 が特定の Unicode 文字 (ディンバットなど) を含む可能性のある文字列をレンダリングせず、その時点でサイレントにレンダリングをカットするまで、この API としてです。 .

代わりに drawInRect:withFont:lineBreakMode:alignment: を使用する必要があります (MonoTouch では DrawString (string msg, RectangleF rect, UIFont font, UILineBreakMode breakMode, UITextAlignment align) メソッド) が適切にレンダリングされるためです。

さらに、iPhone のすべてのフォントが完全なフォント セットであるとは限りません。次のリファレンスを使用できます。

http://daringfireball.net/misc/2007/07/iphone-osx-fonts

文字の完全なセットを持つフォントのリスト。

于 2010-07-22T04:26:21.930 に答える