2016-04-02 10 views
5

पर गतिशील रूप से फ़ॉन्ट्स को डाउनलोड और इंस्टॉल कैसे कर सकता हूं एक क्लाइंट एपीआई कॉल के साथ उन्हें डाउनलोड करके आईओएस ऐप में गतिशील रूप से फोंट जोड़ना चाहता है।मैं आईओएस ऐप

क्या यह संभव है? मेरे द्वारा खोले गए सभी संसाधनों से पता चलता है कि .ttf फ़ाइल को मैन्युअल रूप से कैसे खींचें और इसे प्लेस्ट में जोड़ें। क्या एक फ़ॉन्ट डाउनलोड करना और फ्लाई क्लाइंट साइड पर प्रोग्रामिंग के माध्यम से इसका उपयोग करना संभव है?

धन्यवाद।

उत्तर

9

ठीक है, तो यहां मैंने यह कैसे किया है। सबसे पहले जहां यह आवश्यक था:

#import <CoreText/CoreText.h> 

फिर अपना NSURL सत्र कॉल करें। मेरे ग्राहक ने अमेज़ॅन के एस 3 पर एक फ़ॉन्ट अपलोड किया। तो जहां जरूरत ऐसा करते हैं:

// 1 
NSString *dataUrl = @"http://client.com.s3.amazonaws.com/font/your_font_name.ttf"; 
NSURL *url = [NSURL URLWithString:dataUrl]; 

// 2 
NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    // 4: Handle response here 
    if (error == nil) { 
     NSLog(@"no error!"); 
     if (data != nil) { 
      NSLog(@"There is data!"); 
      [self loadFont:data]; 
     } 
    } else { 
     NSLog(@"%@", error.localizedDescription); 
    } 
}]; 

// 3 
[downloadTask resume]; 

मेरे loadFont डेटा यहाँ है:

- (void)loadFont:(NSData *)data 
{ 
    NSData *inData = data; 
    CFErrorRef error; 
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data); 
    CGFontRef font = CGFontCreateWithDataProvider(provider); 
    if(!CTFontManagerRegisterGraphicsFont(font, &error)){ 
     CFStringRef errorDescription = CFErrorCopyDescription(error); 
     NSLog(@"Failed to load font: %@", errorDescription); 
     CFRelease(errorDescription); 
    } 
    CFRelease(font); 
    CFRelease(provider); 

    [self fontTest]; 
} 

तब कि अंत में fontTest यकीन है कि फॉन्ट वास्तव में नहीं है, और मेरे मामले में बनाने के लिए सिर्फ है, यह गया था ! और यह भी दिखाया गया है कि जब ऐप चलाया गया था तब यह दिखाया गया था।

- (void)fontTest 
{ 
    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); 
    } 
} 
+0

यह दिलचस्प और उपयोगी है! निश्चित रूप से पसंदीदा में जोड़ें। यदि यह आपके लिए काम करता है, तो सही उत्तर के रूप में चिह्नित करें? : पी – emotality

+1

मुझे अपने उत्तर को सही के रूप में चिह्नित करने से दो दिन पहले इंतजार करना होगा, स्टैक ओवरफ्लो मुझे बताता है;) – MScottWaller