086b003bb9a093c76481a506660828c1
iOS App中自定义字体使用(服务端下载)

需求

项目为阅读项目,需求是阅读内容可以更换自定义字体。

方案

  1. 在App包内集成在网站上下载的字体,otf/ttf格式,拖入Xcode中,info.plist添加key Fonts provided by application, value:对应字体包的名称 xxx.otf/ttf网上很多,这不是我们的重点。

  2. 动态下载字体,这里推荐一篇文章,这种方式缺点是字体必须是苹果系统存在的,有一定的局限性。不是重点

  3. 从服务端获取字体的下载链接,下载到沙盒目录,从沙盒目录获取字体,加载字体,非常灵活,而且想要什么字体有什么字体,(注意字体版权)。下面实现部分,只说这种方式。

实现过程

  • 首先,需要一个字体下载的链接,基本都是服务端提供的下载链接,比如
https://xxxx.com/static/fonts/heiti.ttf
  • 创建一个字体下载的管理类 DownloadFontManager
  • 下载字体的方法
  • 注册字体的方法
.h 文件
// 创建管理类
+ (instancetype)shareManager;

// 下载字体
- (void)downloadFontWithURL:(NSString *)fontURL postScript:(NSString *)postScritp progress:(void(^)(CGFloat progress))progress filePath:(void(^)(NSString *filePath))filePath failure:(void(^)(NSError *error))failure;

// 注册字体
- (void)loadFontWithFilePath:(NSString *)filePath completion:(void(^)(void))completion;
  • 具体实现过程
.m文件

+ (instancetype)shareManager {
    static BKDownLoadFontManager *shareManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shareManager = [[self alloc] init];
    });
    return shareManager;
}
  • AFN对于字体的下载
    ```

  • (void)downloadFontWithURL:(NSString *)fontURL postScript:(NSString *)postScritp progress:(void(^)(CGFloat progress))progress filePath:(void(^)(NSString *filePath))filePath failure:(void(^)(NSError *error))failure {

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:fontURL]];
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {

    // 处理NSProgress
top Created with Sketch.