• 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实例的。

  • 相关阅读:
    npm run build无法打包的可能原因 npm ERR! missing script: build
    java的Scanner类的close()方法引来的故事
    Markdown语法1
    MarkdownPad2破解安装&使用
    MarkDown语法5
    Markdown语法2
    Markdown0
    Sublime Text配置anaconda环境
    解决:Tensorflowgpu中的Could not load dynamic library ‘cudart64_101.dll‘; dlerror: cudart64_101.dll not found
    Markdown语法4
  • 原文地址:https://www.cnblogs.com/zhaoguowen/p/3968181.html
Copyright © 2020-2023  润新知