2012-03-19 5 views
9

私はUILabelのカスタムサブクラスを持っており、CoreTextを使用してカスタム描画を行います。 フォントプロパティを使用してラベルにアクセスするラベルに設定されているUIFontを使用して文字列を描画しました。私はまた、フォントにいくつかの特性を追加します。これは次のようなものです:UIFontをCTFontRefに変換し、網膜ディスプレイに斜体を追加します。

UIFont* font = [self font]; 
CTFontRef ref = CTFontCreateWithName((CFStringRef)[font name], [font pointSize], NULL); 
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, [font pointSize], NULL, kCTFontItalicTrait, kCTFontItalicTrait); 

これは、新しいipadが網膜ディスプレイで現れるまでうまく動作するために使用されました。 CTFontCreateCopyWithSymbolicTraits呼び出しを実行すると、nilの戻り値が生成されます。私は[font name]がこれらの新しいデバイスで ".HelveticaNeueUI"を返すことを発見しました。 CTFontCreateWithNameは、このプライベートフォント名で正常に動作するようですが、CTFontCreateCopyWithSymbolicTraitsはありません。しかし、[UIFont italicSystemFontOfSize:[font pointSize]]を使用して斜体フォントを作成すると、[font name]がまだ ".HelveticaNeueUI"を返す斜体フォントが作成されます。

UIFontCTFontRefに変換するにはどうすればいいですか?CTFontRefに網膜と非網膜ディスプレイの新しい特性を適用することはできますか?

答えて

13

少し古いが、誰それが懸念まだかもしれないために:

新しい網膜デバイス(iPhone 4、iPadの)で使用される新しいノイエヘルベチカシステムフォントがイタリックバージョンを持っていないために起こります。すべてのフォントが太字またはイタリック体を持っているわけではありません。
斜体のテキストが必要な場合は、別のフォント(たとえば、古いHelvetica)を使用する必要があります。

CTFontRef ref = CTFontCreateWithName((CFStringRef)@"Helvetica", 12, NULL); 
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, 12, NULL, kCTFontItalicTrait, kCTFontItalicTrait); 
+0

そして、あなたの代わりに... – ssteinberg

+0

ハです。コアテキストへようこそ。 –

+0

無駄なdownvoteのUpvote。 –

1

ARCを使用すると、UIFont/NSFontからCTFontRefへの変換は非常に簡単です。

UIFont:

UIFont *uiFont = [UIFont fontWithName:@"Helvetica" size:10]; 
CTFontRef ctFont = (__bridge CTFontRef)uiFont; 

NSFont:

NSFont *nsFont = [NSFont fontWithName:@"Helvetica" size:10]; 
CTFontRef ctFont = (__bridge CTFontRef)nsFont; 
関連する問題