如何使用Core Text从文件加载字体(TTF)?

mie*_*lly 13 macos cocoa macos-carbon osx-snow-leopard core-text

在OSX 10.6之前,ATSFontActivateFromFileSpecification/ATSFontActivateFromFileReference可用,可用于从文件加载字体.我在Core Text中找不到类似的东西.

Rob*_*ger 18

您可以通过以下方式CTFontRef从字体文件中获取CGFontRef:

CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/path/to/font"), kCFURLPOSIXPathStyle, false);
CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(url);
CGFontRef theCGFont = CGFontCreateWithDataProvider(dataProvider);
CTFontRef theCTFont = CTFontCreateWithGraphicsFont(theCGFont);
CFRelease(theCGFont);
CFRelease(dataProvider);
CFRelease(url);

// do something with the CTFontRef here

CFRelease(theCTFont);   
Run Code Online (Sandbox Code Playgroud)


mie*_*lly 10

它看起来像CTFontManagerCreateFontDescriptorsFromURLCore Text替代品.

  • 它使[代码比核心图形路线更短](https://gist.github.com/1696100). (2认同)

awf*_*ode 6

以下是 2020 年如何执行此操作的更新版本。现在简单多了。使用 12 作为任意字体大小。

let fontURL = URL(fileURLWithPath: "path/to/font.otf")
let fd = CTFontManagerCreateFontDescriptorsFromURL(fontURL as CFURL) as! [CTFontDescriptor]
let theCTFont = CTFontCreateWithFontDescriptor(fd[0], 12.0, nil)
Run Code Online (Sandbox Code Playgroud)


Mur*_*m K 5

NSURL *fontURL = [[NSBundle mainBundle] URLForResource:@"Crystal" withExtension:@"ttf"];
    assert(fontURL);
    CFErrorRef error = NULL;
    if (!CTFontManagerRegisterFontsForURL((__bridge CFURLRef)fontURL, kCTFontManagerScopeProcess, &error))
    {
        CFShow(error);
        abort();
    }
Run Code Online (Sandbox Code Playgroud)