IOS运行时动态注册字体

  IOS运行时动态注册字体


  在IOS开发中,使用第三方字体,如ttf文件,otf文件,是很简单的。只需要两个步骤。1,讲 ttf文件,otf文件添加到工程根目录中。2,在info.plist中增加字体文件,是字体文件名。在使用时,双击打开字体文件,标题会显示字体名称,使用那个自体名称(setFontName)即可。在android中,是把字体文件拷贝到asset目录中,再使用typeface类根据文件得到其实例。

  现在的问题是,在我们玩图的开发中,由于中文字体过大,需要从线上下载,下载到本地使用,这就涉及到一个注册字体问题。IOS应用程学在启动时,会自动读取info.plist文件,如果在在当前目录找到对应的字体文件,就会向系统注册这个字体,然后才能根据字体名称使用。所以在字体在线下载这个功能中,提前在infp.plist中注册字体是不可行的,那就要动态注册字体了,就是运行时下载字体ttf文件,下载到documents目录中,然后根据字体文件全文件名(ttfFileName)去注册。下面是关键的代码。、

  

   NSURL *url = [NSURL fileURLWithPath:ttfFileName];

        CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);

        if (fontDataProvider == NULL)

            return ttfFileName;

        CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);

    

        CFErrorRef error;

        if(!CTFontManagerRegisterGraphicsFont(newFont, &error)){

            CFStringRef errorDescription = CFErrorCopyDescription(error);

            NSLog(@"Failed to load font: %@", errorDescription);

            CFRelease(errorDescription);

        }

        CFRelease(newFont);

        CFRelease(fontDataProvider);

  这就是根据字体文件的全文件名动态注册的代码。android就不存在注册不注册的问题,因为它本来就是根据字体文件全文件名来省城typeface实例的。

原文地址:https://www.cnblogs.com/zhaoguowen/p/3968181.html