iOS 使用第三方字体

您所在的位置:网站首页 iphone第三方字体 iOS 使用第三方字体

iOS 使用第三方字体

2024-07-18 03:32:29| 来源: 网络整理| 查看: 265

前言

在iOS的项目开发中经常遇到需要使用一些自定义的字体文件,比如仿宋_GB2312、华康少女体等。之前我们为了使用这些自定义的字体,在应用的资源包中放入这些字体文件。因为字体文件通常比较大,有的一个字库就达到10M以上,这样打包后的ipa文件的体积就可能会变得很大,对于只有个别的模块需要特殊的字体样式的应用来说很不划算,那么在iOS6.0以后苹果就开放了动态加载字体的权限。下面就iOS中使用字体的这两种方式进行介绍。

使用静态字体

将字体文件拷贝到项目工程中,在Info.plist文件中添加Fonts provided by application的配置项,其中每一个Item对应的是字体文件的名称,如huakangshaonv.ttf。

 

fontDemo ScreenShot.png

然后就可以调用+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize使用字体,如果不知道fontName可以遍历打印出来:

- (void)allFont { NSArray *fontFamilies = [UIFont familyNames]; for (NSString *fontFamily in fontFamilies) { NSArray *fontNames = [UIFont fontNamesForFamilyName:fontFamily]; NSLog (@">>> fontFamily : %@ , fontNames : %@", fontFamily, fontNames); } } 使用动态字体

在网易新闻iOS客户端中可以使用自定义的字体,对于未下载的字体可先下载然后安装下次就能自动设置为该字体,效果如下:

 

 

 

wangyiFont.png

下面就该功能简单介绍实现的步骤

下载字体文件 - (NSString *)downloadZipFile:(NSString *)fileUrl toPath:(NSString *)path { NSError *error = nil; NSURL *url = [NSURL URLWithString:fileUrl]; NSString *fileName = [url lastPathComponent]; NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error]; if(!error) { NSString *zipPath = [path stringByAppendingPathComponent:fileName]; [data writeToFile:zipPath options:0 error:&error]; if(!error) { return zipPath; } } return nil; } 解压zip压缩包

iOS中解压zip压缩文件非常方便,使用ZipArchive这个开源项目按照如下的方式即可快速解压zip文件。

- (NSString *)expandZipFile:(NSString *)src toPath:(NSString *)desc { ZipArchive *za = [[ZipArchive alloc] init]; if ([za UnzipOpenFile:src]) { BOOL ret = [za UnzipFileTo:desc overWrite:YES];//解压文件 if(ret) { NSString *zipName = [src lastPathComponent];//获取zip文件的文件名 [[NSFileManager defaultManager] removeItemAtPath:zipPath error:nil];//删除zip压缩包 zipName = [zipName substringToIndex:[zipName rangeOfString:@".zip"].location];//获取解压到的文件夹 return [self.downloadPath stringByAppendingPathComponent:zipName]; } } return nil; } 注册指定路径下的字体文件

下载回来的字体文件如果不做处理是不能直接使用的,使用前需要先注册然后才能使用,注册方式如下:

- (void)registerFont:(NSString *)fontPath { NSData *dynamicFontData = [NSData dataWithContentsOfFile:fontPath]; if (!dynamicFontData) { return; } CFErrorRef error; CGDataProviderRef providerRef = CGDataProviderCreateWithCFData((__bridge CFDataRef)dynamicFontData); CGFontRef font = CGFontCreateWithDataProvider(providerRef); if (! CTFontManagerRegisterGraphicsFont(font, &error)) { //注册失败 CFStringRef errorDescription = CFErrorCopyDescription(error); NSLog(@"Failed to load font: %@", errorDescription); CFRelease(errorDescription); } CFRelease(font); CFRelease(providerRef); }

需要先引入#import ,CoreText框架

判断字体是否加载

在使用字体文件前最好是先判断字体是否已经被加载过了,判断方式如下:

- (BOOL)isFontDownloaded:(NSString *)fontName { UIFont* aFont = [UIFont fontWithName:fontName size:12.0]; BOOL isDownloaded = (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)); return isDownloaded; } 其他说明

经测试注册过的字体在应用关闭后下次开启应用,判断字体是否加载时返回为NO,为了保证正常使用需要每次启动应用的时候先遍历一遍字体文件夹将里面的字体文件都再次注册一遍即可。参考代码如下:

//注册fonts目录下面的所有字体文件 NSArray *ary = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.downloadPath error:nil]; for (NSString *p1 in ary) { NSString *t1 = [self.downloadPath stringByAppendingPathComponent:p1]; NSArray *ary1 = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:t1 error:nil]; for (NSString *p1 in ary1) { NSString *t2 = [t1 stringByAppendingPathComponent:p1]; if([t2 rangeOfString:@".ttf"].location != NSNotFound) { [self registerFont:t2]; } } }

以上就是对使用第三方字体的方法的介绍。

参考

曾静的技术博客:在iOS开发中使用自定义字体

   


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭