自定义字体的两种显示方法

+ (UIFont *)yq_cloudFontWithFilePath:(NSString *)filePath size:(CGFloat)size
{
    UIFont *systemFont = [UIFont systemFontOfSize:size];
    if (![[NSFileManager defaultManager]fileExistsAtPath:filePath]) {
        return systemFont;
    }
    CFURLRef fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (__bridge CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
    CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(fontURL);
    if(!dataProvider) return systemFont;
    CFRelease(fontURL);
    CGFontRef graphicsFont = CGFontCreateWithDataProvider(dataProvider);
    CGDataProviderRelease(dataProvider);
    if (!graphicsFont) return systemFont;
    CTFontRef smallFont = CTFontCreateWithGraphicsFont(graphicsFont, size, NULL, NULL);
    CGFontRelease(graphicsFont);
    UIFont *returnFont = (__bridge UIFont *)smallFont;
    CFRelease(smallFont);
        return returnFont;
}

另一种如下:

+ (UIFont *)yq_cloudFontWithFilePath:(NSString *)filePath size:(CGFloat)size
{
    UIFont *sysFont = [UIFont systemFontOfSize:size];
    if (![[NSFileManager defaultManager]fileExistsAtPath:filePath]) {
        return sysFont;
    }
    CFURLRef fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (__bridge CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
    CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(fontURL);
    if(!dataProvider) return sysFont;
    CFRelease(fontURL);
    CGFontRef fontRef = CGFontCreateWithDataProvider(dataProvider);
    CGDataProviderRelease(dataProvider);
    if (!fontRef) return sysFont;
    CFErrorRef errorRef;
    CFStringRef fontName = CGFontCopyPostScriptName(fontRef);
    NSString *fontNameCopy = (__bridge NSString *)(fontName);
    if ([[UIFont familyNames] containsObject:fontNameCopy]) {
        UIFont *font = [self fontWithName:(__bridge NSString *)(fontName) size:size];
        if (fontName) CFRelease(fontName);
        CGFontRelease(fontRef);
        return font;
    } else {
        BOOL suc = CTFontManagerRegisterGraphicsFont(fontRef, &errorRef);
        if (!suc) {
            CGFontRelease(fontRef);
            return sysFont;
        } else {
            UIFont *font = [self fontWithName:(__bridge NSString *)(fontName) size:size];
            if (fontName) CFRelease(fontName);
            CGFontRelease(fontRef);
                       return font;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容