iphone - iOS:在运行时以编程方式添加自定义字体

标签 iphone ipad ios fonts

我想允许我的应用程序用户在应用程序中使用他们自己的字体,方法是将它们复制到文档目录中(通过 iTunes)。但是,我找不到以这种方式使用自定义字体的方法,因为正确的方法取决于在应用程序的 Info.plist 中使用 UIAppFonts 键.

有什么方法可以在运行时覆盖它吗?

谢谢。

最佳答案

我知道这是一个老问题,但我今天尝试做同样的事情并找到了使用 CoreText 和 CGFont 的方法。

首先确保添加 CoreText 框架和

#import <CoreText/CoreText.h>

那么应该这样做(在这个例子中,我使用的是我之前下载并保存到 Documents 目录中的 fonts 目录的字体):

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentsDirectory = [paths objectAtIndex:0];
    NSString * fontPath = [documentsDirectory stringByAppendingPathComponent:@"Fonts/Chalkduster.ttf"];
    NSURL * url = [NSURL fileURLWithPath:fontPath];
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
    NSString * newFontName = (__bridge NSString *)CGFontCopyPostScriptName(newFont);
    CGDataProviderRelease(fontDataProvider);
    CFErrorRef error;
    CTFontManagerRegisterGraphicsFont(newFont, &error);
    CGFontRelease(newFont);

    UIFont * finalFont = [UIFont fontWithName:newFontName size:20.0f];

希望它能帮助任何遇到这个问题的人!

关于iphone - iOS:在运行时以编程方式添加自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942449/

相关文章:

ios - 如何通过从服务器获取数据来设置文本字段值

ios - 带有分数的 NSDecimalNumber 在提升到高幂时返回大数?

ios - dispatch_async(dispatch_get_main_queue() 不适用于 iPad,但适用于 iPhone

html - iPad 上的 iFrame 无法在内部呈现全部内容

iphone - 在没有 CATiledLayer 的情况下在 iOS 上呈现和缩放大图像

ios - 我正在尝试使用 AVAudioPlayer 从服务器播放音频,但文件未播放

ios - 如何在没有 google api 的情况下绘制路线(没有折线)?

iphone - 检查新的 SDK 调用?

iphone - device Orientation 到 statusBar Orientation 改变

iphone - 如何让 NSTimer 保持活力?