动态更改iPhone/iPad文本为自定义字体

3

我希望创建一个应用程序,使用用户自定义的字体,因此我希望我的应用程序能够在运行时加载ttf文件。 我熟悉通过UIAppFonts密钥添加自定义字体,如在iPhone上添加自定义字体中所讨论的那样。如果提供了用户创建的自定义版本,我是否可以成功创建一个占位符自定义字体,供我的应用程序交换?


1
您不能在运行时更改应用程序包:http://stackoverflow.com/questions/4764591/replacing-images-in-the-bundle-at-run-time。您可以尝试保存到文档目录,但我不确定UIFont是否会识别未在info.plist和应用程序包中找到的字体。 - James Paolantonio
我的想法是将一个“占位符”字体放入Bundle中,然后将应用程序指向文档目录中的“真实”字体。但我没有看到任何机制来指示程序在文档目录中查找字体。 - user216661
很遗憾,这似乎不可能。 - James Paolantonio
1个回答

3
我用的字体文件是这个:http://www.webpagepublicity.com/free-fonts/a/Almagro%20Regular.ttf 我使用了以下代码:
 CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontFilepath UTF8String]);

 // Create the font with the data provider, then release the data provider.
CGFontRef customFont =  CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);

CFErrorRef error = nil;
CTFontManagerRegisterGraphicsFont(customFont, &error);

CGFontRelease(customFont);

if (error != nil)
{
    NSError* err = (__bridge NSError*)error;
    NSLog(@"error code %d desc: %@",err.code, [err description]);
}

UIFont* f = [UIFont fontWithName:@"Almagro" size:14.0];

但是需要注意一些问题。您需要知道字体名称,因为它可能与文件名略有不同。在我的示例中,文件名为“Almagro Regular.ttf”,但字体名称只是“Almagro”。在另一个论坛上,有人说您需要小心名称中带有空格的字体,因为像“Sans Serif”这样的字体将被注册为“SansSerif”用于UIFont fontWithName:size:

如果有效,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接