IOS 7 में कस्टम फोंट


102

मैं एक गेम विकसित कर रहा हूं और मैं अपने ऐप में एक कस्टम फ़ॉन्ट का उपयोग करना चाहूंगा। मैं इसके लिए SpriteKit का उपयोग कर रहा हूं, अगर यह महत्वपूर्ण है। मैंने इस https://github.com/deni2s/IBCustomFonts का उपयोग करने की कोशिश की है, लेकिन मैं इसे इस फॉन्ट के साथ काम करने के लिए नहीं प्राप्त कर सकता हूं

मैंने विभिन्न चीजों की कोशिश की है, और मैंने ऐप के info.plist पर फ़ॉन्ट पंजीकृत किया है ... क्या किसी को पता है कि क्या चल रहा है?


क्या आप वाकई अपने कोड में इसका उपयोग करते समय फ़ॉन्ट के लिए सही नाम का उपयोग कर रहे हैं?
निक

1
यह ब्लॉग आपके लिए उपयोगी हो सकता है codewithchris.com/-
जू यिन

जवाबों:


277

सबसे पहले मैं मान रहा हूं कि स्प्राइटकिट को कोई फर्क नहीं पड़ता है।

  1. आपको अपने प्रोजेक्ट में कॉपी किए गए .otf या .ttf में अपने फ़ॉन्ट की आवश्यकता है। उदाहरण के लिए सहायक फाइलें।
  2. आपको .plist फ़ाइल को संपादित करने की आवश्यकता है । अपने प्लिस्ट में "एप्लिकेशन द्वारा प्रदान की गई कुंजी " जोड़ें और आइटम 0 में आपके द्वारा समर्थित एक्सटेंशन के साथ कॉपी किए गए फ़ॉन्ट का सटीक फ़ाइल नाम कॉपी करें। उदाहरण के लिए: "जोसेफिनसंसडेट-लाइट_0. डॉट
  3. सुनिश्चित करें कि आपके द्वारा अपने ऐप में आयात किए गए फ़ॉन्ट को ऐप में ही पैक किया जा रहा है। अपने लक्ष्य का चयन करके , फिर चरण बनाएँ , फिर बंडल संसाधन की प्रतिलिपि बनाएँ । यदि आपको अपना फ़ॉन्ट वहां दिखाई नहीं देता है, तो उसे सहायक फ़ाइलों से खींचें ।

अंत में, आप अपने सभी फोंस को सूचीबद्ध करना चाहेंगे जब ऐप केवल आपके फॉन्ट के लिए उपयोग करने योग्य नाम देखना शुरू कर दे। आप इस छोटे से कोड के साथ ऐसा करेंगे:

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

मुद्रित परिणामों में अपने फ़ॉन्ट के लिए खोज करें, उदाहरण के लिए, मैं "जोसेफिन" की खोज करूंगा और मैं देखूंगा कि वास्तविक फ़ॉन्ट का नाम "जोसेफिनसंसडेट-लाइट" है। उसके बाद आपको केवल उस फ़ॉन्ट का उपयोग करना होगा:

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

IOS8 में आप अपने फोंट को सीधे प्रोजेक्ट में जोड़ते हैं और वे इंटरफ़ेस बिल्डर में दिखाई देते हैं। इसके लिए अपने कोड को संशोधित करें लेकिन iOS7 के लिए प्रोग्रामेटिक रूप से फ़ॉन्ट सेट करें और इसे xCode6 इंटरफ़ेस बिल्डर में चुनें। पुनश्च। XCode6 में इंटरफ़ेस बिल्डर आपको सही फ़ॉन्ट नाम देता है जिसे आप नीचे दिए गए कोड में कॉपी-पेस्ट कर सकते हैं।

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

आशा है कि यह मदद करता है, चीयर्स।


धन्यवाद! मैं समझ गया! समस्या यह थी कि मैं इसे सपोर्टिंग फाइल्स में शामिल नहीं कर रहा था, इसलिए यह लोड नहीं हो रहा था: P
जोस मारिया

1
मुझे UIAppFonts
माइक फ्लिन

1
मैंने अपने ऐप, iOS7 / Xcode 5.1.1 से पूरे प्रोजेक्ट को iOS8 / Xcode 6.0 प्रोजेक्ट में रिक्रिएट किया। कस्टम फ़ॉन्ट तब तक नहीं दिखा रहा था जब तक कि मैंने 2. स्टेप नहीं किया। जीआर 8 स्पष्टीकरण!
MB_iOSDeveloper

1
स्विफ्ट में फ़ॉन्ट नाम प्राप्त करने के लिए एक ही कोड: let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
अलेक्जेंडर बेकर्ट

1
सभी फ़ॉन्ट नामों को प्रिंट करने के लिए कुछ स्विफ्ट कोड:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

कस्टम फोंट का उपयोग करने के लिए कोई समस्या नहीं है, मैंने इसे किया। इन कदमों का अनुसरण करें:

  1. अपनी जानकारी में फ़ॉन्ट पंजीकृत करें। "आवेदन द्वारा प्रदान किए गए फ़ॉन्ट" प्रविष्टि को जोड़ने में मदद करें। फ़ॉन्ट फ़ाइल नाम रखो, फ़ॉन्ट नाम नहीं। जैसे font.ttf (मुझे लगता है कि आपने पहले से ही ऐसा किया था)
  2. प्रोजेक्ट नेविगेटर पर अपनी परियोजना पर जाएं, परियोजना के नाम पर क्लिक करें और "चरणों का निर्माण करें" पर जाएं फिर "कॉपी बंडल संसाधन" में नीचे देखें, बहुत सारी फाइलें हैं और "+" चिह्न की खोज करें। एक पॉपअप विंडो आपकी प्रोजेक्ट फाइलों के साथ खुलेगी। अपनी फ़ॉन्ट फ़ाइल खोजें और इसे बंडल में जोड़ें।
  3. अंत में फ़ॉन्ट नाम जांचें। जब आप इसे अपने कोड में उपयोग करते हैं, तो आपको फ़ाइल नाम नहीं, फ़ॉन्ट नाम का उपयोग करना होगा। फ़ॉन्ट नाम जानने के लिए, फ़ाइंडर में फ़ॉन्ट फ़ाइल पर डबल क्लिक करें और एक विंडो खुलकर फ़ॉन्ट दिखाएगा। उस विंडो का शीर्षक जांचें, उस फ़ॉन्ट का नाम है जिसे आपको उपयोग करना है।

और सलाह, उस नाम को आपकी ..Prefix.pch फ़ाइल में मैक्रो के रूप में जोड़ें। अगर आपको कई बार फॉन्ट का इस्तेमाल करना है तो इसे अपने प्रोजेक्ट में इस्तेमाल करना आसान होगा।

मुझे लगता है कि आपके पास समस्या यह थी कि आपने फ़ॉन्ट को ठीक से पंजीकृत किया था, लेकिन इसे ऐप बंडल में कॉपी नहीं किया गया था। इसलिए जब एप्लिकेशन को निष्पादित किया गया तो वह फ़ॉन्ट नहीं ढूंढ सका। इसलिए चरण 2 महत्वपूर्ण है। मैंने पहली बार यह पता लगाने की कोशिश में बहुत समय बिताया कि :)


2
मेरे लिए कुंजी फ़ॉन्ट का शीर्षक था। धन्यवाद!
ऑस्कर

20

इसे तेजी से हासिल करने के लिए

यदि आप अपने सभी फोंट को सूचीबद्ध करना चाहते हैं, जब ऐप केवल आपके फॉन्ट के लिए उपयोग करने योग्य नाम देखना शुरू करता है। आप इस छोटे से कोड के साथ कर सकते हैं:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

या साथUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
डैनियल

5

मैं कई बार कोशिश करने के बाद काम करने के लिए इन उत्तरों को प्राप्त करने में सक्षम नहीं हूं। मेरे द्वारा स्वीकार किए गए उत्तर में निर्देश का पालन करने का एकमात्र तरीका मुझे कभी भी एक कस्टम फ़ॉन्ट मिला है, फिर फ़ॉन्ट का उपयोग करने वाले कहानी बोर्ड में एक छिपा हुआ लेबल बनाएं। मैं प्रोग्राम को फ़ॉन्ट का उपयोग कर सकता हूं। अजीब और हिकी मुझे पता है लेकिन यह मेरे लिए काम करता है।


1
आप बिल्कुल सही हैं। मैंने कई ट्यूटोरियल में सब कुछ देखा, जिसमें प्लिस्ट, प्रोजेक्ट के लिए चेकमार्क, चरणों का निर्माण, और अंत में सही फ़ॉन्ट परिवार का नाम पाया, लेकिन यह अभी भी काम नहीं करेगा। फिर मैंने एक छुपा हुआ लेबल जोड़ा जैसा कि आप कहते हैं और अंत में यह दिखा। मैं Xcode 7.2 का उपयोग कर रहा हूं और यह एक बग होना चाहिए।
DrZ214

3

यदि आप Xcode 6 में हैं तो यह जितना आसान हो जाता है। बस fontअपने प्रोजेक्ट में एक फ़ोल्डर जोड़ें, अपने फ़ॉन्ट को फ़ोल्डर में जोड़ें, और आप जाने के लिए अच्छे हैं।

यहां छवि विवरण दर्ज करें


7
सुनिश्चित करें कि आप इसे अपने इच्छित लक्ष्य में भी शामिल करते हैं। डरपोक शौक Xcode।
मैट पार्किंस

3

यदि उपरोक्त विधियों में से कोई भी आपके लिए काम नहीं करता है, और आप अपने कस्टम फ़ॉन्ट का उपयोग "प्रोग्रामेटिक रूप से" केवल (यानी आपने किसी भी xib में नहीं किया है) का उपयोग करने के लिए होता है, तो आपको इसे कम से कम एक बार एक xib, कहीं भी उपयोग करने की आवश्यकता होगी ।

(पी एस स्टुअर्ट क्लार्क - पहले से ही इसका जवाब दिया है, इसलिए मेरे लिए कोई क्रेडिट नहीं है। हालांकि, मैंने इसे अलग जवाब के रूप में फिर से लिखना और पोस्ट करने का फैसला किया, क्योंकि मैं उसका जवाब देने से चूक गया, जब मैंने इसे पढ़ा तो मेरे लिए यह स्पष्ट नहीं था। मैंने पाया। जब मैं किसी xib में कस्टम फ़ॉन्ट का परीक्षण कर रहा था, तो संयोग से इस समाधान को बाहर कर दिया, और मैंने देखा कि यह कहीं और प्रोग्रामेटिक रूप से काम करता है, लेकिन जब मैंने xib से फ़ॉन्ट हटा दिया, तो यह प्रोग्रामेटिक रूप से काम करना बंद कर देता है।)


2

स्विफ्ट 3 के लिए अपडेट किया गया।

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}

0

हो सकता है कि एक त्वरित सुधार - यह मेरे लिए तब हुआ जब फ़ॉन्ट पहले से ही काम कर चुका है, लेकिन एक नया उदाहरण लेबल ने वांछित फ़ॉन्ट नहीं दिखाया:

स्वच्छ, गहरा साफ और खाली व्युत्पन्न डेटा फ़ोल्डर।


0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.