1. 程式人生 > >ios自定義字型

ios自定義字型

提供字型檔案路徑,返回所需要字型:複製程式碼-(UIFont*)customFontWithPath:(NSString*)path size:(CGFloat)size{    NSURL *fontUrl = [NSURL fileURLWithPath:path];    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)fontUrl);    CGFontRef fontRef = CGFontCreateWithDataProvider(fontDataProvider);
    CGDataProviderRelease(fontDataProvider);    CTFontManagerRegisterGraphicsFont(fontRef, NULL);    NSString *fontName = CFBridgingRelease(CGFontCopyPostScriptName(fontRef));    UIFont *font = [UIFont fontWithName:fontName size:size];    CGFontRelease(fontRef);    return font;}這樣就不需要在plist設定任何東西,只需要得到字型庫檔案的路徑,就可以取出對應的字型。
上面的方法對於TTF、OTF的字型都有效,但是對於TTC字型,只取出了一種字型。因為TTC字型是一個相似字型的集合體,一般是字型的組合。所以如果對字型要求比較高,所以可以用下面的方法把所有字型取出來:複製程式碼-(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size{    CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);    CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
    CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);    CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);    NSMutableArray *customFontArray = [NSMutableArray array];    for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){        CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);        CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);        NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));        UIFont *font = [UIFont fontWithName:fontName size:size];        [customFontArray addObject:font];    }    return customFontArray;}複製程式碼不過這個方法只支援7.0以上,暫時在7.0以下沒有找到方法。個人看法,因為ttc裡面的字型都比較相似,所以其實使用一個也足以。