IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    iOS使用自定义字体

    wingyiulee发表于 2015-01-05 16:03:36
    love 0

    iOS 6 自带字体:iOS 6: Font list

    iOS 7 自带字体:iOS 7: Font list

    OS X Mavericks 自带字体:
    OS X: Fonts included with Mavericks

    上面两篇文档里列出的字体名字并非编程时用的fontName,只是对应的字体文件的名字。

    可以使用下面的代码查系统自带字体的 fontName,在任意 UIViewController 里加上:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        for (NSString* family in [UIFont familyNames])
        {
            NSLog(@"%@", family);
            for (NSString* name in [UIFont fontNamesForFamilyName: family])
            {
                NSLog(@"%@", name);
            }
        }
    }
    

    以下是真机 debug 在控制台打印出来的:

    Thonburi
    Thonburi-Bold
    Thonburi
    Thonburi-Light
    ...
    Didot-Bold
    Didot-Italic
    Didot
    DIN Alternate
    DINAlternate-Bold
    Bodoni 72 Smallcaps
    BodoniSvtyTwoSCITCTT-Book
    

    加入我想要在 iOS 的 UILabel 中使用 mac 中自带的Yuanti SC,怎么搞?
    1.下载你想要的字体的字体文件,可以是 ttf、otf、ttc 等格式(ttc 格式需要特别注意),此处我从 mac 的系统默认字体存储目录拷贝;
    2.把字体文件添加到 xcode 项目中;
    2.在Info.plist添加以下代码并保存;

        
       UIAppFonts
    	
    		Yuanti.ttc
    		WawaSC-Regular.otf
    		Lantinghei.ttc
    		汉仪楷体简.ttf
    	
       
    

    B261A1C3-2E8F-4006-8AFE-B4831828E225
    3.在 Build Phases/Copy Bundle Resources添加字体文件;
    70428009-10BC-4667-B5B7-D985179CC12F
    4.使用上面 viewDidLoad 代码查找新增的 fontName,比如我添加 Yuanti.ttc 后新增了

    Yuanti SC
    STYuanti-SC-Light
    STYuanti-SC-Bold
    STYuanti-SC-Regular
    

    最后在代码中

    self.contentLabel.font = [UIFont fontWithName:@"Yuanti SC" size:16.0f];
    

    效果:
    83E5E5D7-4417-4015-BAB0-80EE6964554B

    Lantinghei.tcc 下面包含8个字体。

    Lantinghei TC //繁体细
    FZLTXHB--B51-0 //繁体extralight
    FZLTTHB--B51-0 //繁体heavy
    FZLTZHB--B51-0 //繁体demibold
    Lantinghei SC //简体
    FZLTZHK--GBK1-0 //简体demibold
    FZLTTHK--GBK1-0 //简体heavy
    FZLTXHK--GBK1-0 //简体extralight
    

    如果不适用粗体,就直接用Lantinghei SC就可以了。

    ttc 字体文件是字体集合,提取 ttc 字体名方法:

    -(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size
    {
        CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
        CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
        CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);
        CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);
        NSMutableArray *customFontArray = [NSMutableArray array];
        for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){
            CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);
            CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);
            NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));
            UIFont *font = [UIFont fontWithName:fontName size:size];
            [customFontArray addObject:font];
        }
        
        return customFontArray;
    }
    

    另一种思路是直接从 ttc 提取 ttf,有待研究。

    参考资料:

    Tutorial: Porting fonts to the iPhone

    The post iOS使用自定义字体 appeared first on wingyiu.



沪ICP备19023445号-2号
友情链接