2013-11-04 49 views

回答

15

這很有趣,它是一個幾乎沒有記錄的功能,但它似乎可以使用,並且不會讓你的應用程序被拒絕。只是試圖自己研究這件事給我帶來了這個問題,而沒有其他的東西。我能找到的所有文檔都是示例代碼,說明如何使用它:DownloadFont

演示如何在iOS 6及更高版本上按需下載字體。

在iOS 6上,我們添加了應用程序按需下載字體的功能。除了使用iOS 6安裝的字體外,應用程序還可以根據需要安裝其他字體的列表。

所列出的字體已經被Apple授權用於iOS,但由於額外的磁盤空間使用量,它們未與標準iOS固件捆綁在一起。我認爲這將繼續是蘋果提供新字體的方式(除非操作系統的用戶界面的一部分使用它)。此外,與在Info.plist中使用UIAppFonts鍵添加字體不同,在下載字體後,它可用於所有應用程序的使用。

+0

看起來像蘋果故意隱藏這些字體:) – kelin

1

下面是一個關於如何異步下載字體並將其設置爲UITextView的簡單示例。

- (void)asynchronouslySetFontName:(NSString *)fontName toTextView:(UITextView *)textView { 
    CGFloat size = 24.0f; 
    UIFont *font = [UIFont fontWithName:fontName size:size]; 

    if (font && ([font.fontName compare:fontName] == NSOrderedSame || [font.familyName compare:fontName] == NSOrderedSame)) { 
     textView.font = font; 
     return; 
    } 

    NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObject:fontName forKey:kCTFontNameAttribute]; 
    CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs); 

    NSMutableArray *descs = [NSMutableArray array]; 
    [descs addObject:(__bridge id)desc]; 
    CFRelease(desc); 

    __weak UITextView *weakTextView = textView; 

    CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descs, NULL, ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) { 
     if (state == kCTFontDescriptorMatchingDidFinish) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       weakTextView.font = [UIFont fontWithName:fontName size:size]; 
      }); 
     } 

     return YES; 
    }); 
} 

這裏是所有可下載字體的列表。 http://iosfontlist.com

相關問題