ios自定義字型
阿新 • • 發佈:2019-01-08
提供字型檔案路徑,返回所需要字型:複製程式碼-(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裡面的字型都比較相似,所以其實使用一個也足以。