2012-03-19 11 views
9

Özel bir çizim alt yapısı olan CoreText'i kullanarak UILabel numaralı özel bir alt sınıfım var. Dizelerimi, yazı tipi özelliğini kullanarak erişen etikette bulunan UIFont kullanarak çizerdim. Ayrıca yazı tipine bazı özellikler ekliyorum. İşte böyle görünüyor:UIFont'u CTFontRef'e dönüştürün ve Retina ekranında italik ekle

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

Bu, yeni ipad, retina ekranı ile görünene kadar iyi çalışıyordu. CTFontCreateCopyWithSymbolicTraits çağrıyı gerçekleştirdiğimde, bir dönüş değeri üretiyor. Bu yeni cihazlarda [font name] ".HelveticaNeueUI" değerini döndürdüm. CTFontCreateWithName, bu özel yazı tipi adıyla düzgün çalışıyor, ancak CTFontCreateCopyWithSymbolicTraits yapmıyor. Yine de [UIFont italicSystemFontOfSize:[font pointSize]] kullanarak italik bir yazı tipi oluşturursam, [font name]'un hala ".HelveticaNeueUI" değerini döndürdüğü bir italik yazı tipi oluşturur.

nasıl hala retina olmayan retina her iki ekranda benim CTFontRef yeni özellikler uygulayabilirsiniz böylece benim UIFontCTFontRef dönüştürmek gerekir ?

cevap

13

Biraz eski ama bir kimseden için bu olabilir hala endişe:

yeni retina cihazlarda kullanılan yeni Neue Helvetica sistem yazı (iPhone 4, iPad) bir italik sürümü yok çünkü olur

. Her yazı tipinde kalın ve/veya italik bir varyant yoktur.
Dolayısıyla, italik metne ihtiyacınız varsa, örneğin eski Helvetica gibi farklı bir yazı tipi kullanmanız gerekir.

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

Ve alternatiftir ... – ssteinberg

+0

Ha. Çekirdek Metne Hoş Geldiniz. –

+0

Yararsızlıktan kaçınmak için daha fazlası. –

1

ARC kullanıyorsanız, UIFont/NSFont'u CTFontRef'e dönüştürmek çok basittir.

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;