Sal*_*man 8 macos cocoa objective-c
出于与许可相关的原因,我必须解密字体文件并将其加载到内存中然后注册它而不是直接从URL读取.为此,我必须使用CTFontManagerRegisterGraphicsFont.
有问题的部分出现在我尝试使用[NSFont fontWithName:@"Open Sans" size:21.0]它只接受字体的PostScript名称的地方(即("OpenSans或OpenSans-Bold为大胆的重量")并且不会使用姓氏"Open Sans".
如果ATSApplicationFontsPath在info.plist文件中使用注册字体或使用,CTFontManagerRegisterFontsForURLs那么我可以使用该字体的系列名称.但我不能这样做.
(这里使用"Open Sans"作为示例)
这是我用来注册字体的相关代码.
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"OpenSans-Regular" ofType:@"ttf" inDirectory:@"Fonts"];
NSData *fontData = [NSData dataWithContentsOfFile:fontPath];
CGDataProviderRef fontProviderRef = CGDataProviderCreateWithCFData((CFDataRef)fontData);
CGFontRef fontRef = CGFontCreateWithDataProvider(fontProviderRef);
CFErrorRef error;
if (! CTFontManagerRegisterGraphicsFont(fontRef, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(fontRef);
CFRelease(fontProviderRef);
Run Code Online (Sandbox Code Playgroud)
有没有办法让NSFont可以使用字体系列名称CTFontManagerRegisterGraphicsFont?
(使用Xcode 5并定位Mac OS X> = 10.8)
更新:
好的,要验证姓氏来自字体文件本身:我用我的字体尝试了这个... GillSansMTStd-Light.我将字体文件中的姓氏改为"Gill Sans Std Mt Light",随后我可以使用[ NSFont fontWithName:@"Gill Sans MT Std Light" size:10.0 ].
fontforge字体信息面板:

之前:

后:

我查看了我能想到的所有CT/NS字体和字体管理器API的组合.似乎没有API将姓氏与字体相关联 - 我认为这些数据来自字体文件本身.
我想在字体名称表中需要有一个(Mac)字体系列和字体子系列条目.(参见https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html)
我过去曾使用FontForge编辑字体文件 - 也许这可以帮到你?似乎你可以通过自制软件安装它.
最后,我认为有一种更简单的方法来添加字体CTFontManager.我将您的代码更改为:
// register the font:
NSURL * url = [[ NSBundle mainBundle ] URLForResource:@"OpenSans-Regular" withExtension:@"ttf" ] ;
assert( url ) ;
CFErrorRef error = 0 ;
bool ok = CTFontManagerRegisterFontsForURL( (__bridge CFURLRef)url, kCTFontManagerScopeProcess, &error ) ;
assert( ok && !error ) ;
// make sure it's registered (using PS name):
CTFontRef f = CTFontCreateWithName( CFSTR( "OpenSans-Regular" ), 10.0, NULL ) ;
assert( f ) ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |