2012-03-19 32 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); 

यह तब तक ठीक काम करता था जब तक कि नया आईपैड अपने रेटिना डिस्प्ले के साथ दिखाई नहीं देता। जब मैं CTFontCreateCopyWithSymbolicTraits कॉल करता हूं, तो यह शून्य वापसी मूल्य उत्पन्न करता है। मुझे पता चला कि [font name] इन नए उपकरणों पर "हेल्वेतिकाएनयूयूयू" लौटाता है। CTFontCreateWithName इस निजी फ़ॉन्ट नाम के साथ ठीक काम करता प्रतीत होता है, लेकिन CTFontCreateCopyWithSymbolicTraits नहीं है। फिर भी अगर मैं [UIFont italicSystemFontOfSize:[font pointSize]] का उपयोग करके एक इटैलिक फ़ॉन्ट बना देता हूं तो यह एक इटैलिक फ़ॉन्ट बनाता है जिसके लिए [font name] अभी भी "हेल्वेतिकाएयूयूयूआई" लौटाता है।

मुझे अपने UIFont को CTFontRef में कैसे परिवर्तित करना चाहिए ताकि मैं अभी भी रेटिना और गैर-रेटिना डिस्प्ले पर अपने CTFontRef पर नए लक्षण लागू कर सकूं?

उत्तर

13

थोड़ा पुराने लेकिन जिसे के लिए यह हो सकता है अभी भी चिंता का विषय:

क्योंकि नए Neue Helvetica प्रणाली नए रेटिना उपकरणों में प्रयुक्त फ़ॉन्ट (iPhone 4, iPad) एक इटैलिक संस्करण नहीं है होता है। प्रत्येक फ़ॉन्ट में एक बोल्ड और/या इटैलिक संस्करण नहीं होता है।
तो, यदि आपको इटैलिक टेक्स्ट की आवश्यकता है, तो आपको एक अलग फ़ॉन्ट का उपयोग करने की आवश्यकता है, उदाहरण के लिए, पुरानी हेल्वैटिका।

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

और अपने विकल्प है ... – ssteinberg

+0

हा। कोर टेक्स्ट में आपका स्वागत है। –

+0

बेकार डाउनवोट के लिए उपरोक्त। –

1

यूआईएफओटी/एनएसएफओटी को सीटीएफओटीआरएफ में कनवर्ट करना बहुत सरल है यदि आप एआरसी का उपयोग करते हैं।

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;