Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “内部自定义字体”;Cocoa Touch静态库“;_Ios_Objective C_Cocoa Touch_Static Libraries_Custom Font - Fatal编程技术网

Ios “内部自定义字体”;Cocoa Touch静态库“;

Ios “内部自定义字体”;Cocoa Touch静态库“;,ios,objective-c,cocoa-touch,static-libraries,custom-font,Ios,Objective C,Cocoa Touch,Static Libraries,Custom Font,我正在创建一个框架(“Cocoa Touch静态库”),供其他iOS开发人员使用。 现在,我将按照以下步骤在框架内使用自定义字体。 步骤2在Info.plist文件中设置为“UIAppFonts”。 但对于框架,Info.plist将由开发人员(ie)提供。 因此,我的框架用户只能在其应用程序的plist文件中设置“UIAppFonts”属性,或者有没有办法在框架内自行设置该属性,以便我的框架的每个用户都不需要设置“UIAppFonts”属性? 请提供建议,谢谢。您可以提供一个示例plist,甚

我正在创建一个框架(“Cocoa Touch静态库”),供其他iOS开发人员使用。 现在,我将按照以下步骤在框架内使用自定义字体。 步骤2在Info.plist文件中设置为“UIAppFonts”。 但对于框架,Info.plist将由开发人员(ie)提供。 因此,我的框架用户只能在其应用程序的plist文件中设置“UIAppFonts”属性,或者有没有办法在框架内自行设置该属性,以便我的框架的每个用户都不需要设置“UIAppFonts”属性?
请提供建议,谢谢。

您可以提供一个示例plist,甚至可以编写一个实用程序,通过更新给定的属性列表来执行此设置,但是库的用户需要自己做一些事情,手动更新plist或使用您的实用程序。您无法避免这种情况。

正如您所说,您无法从静态库中设置UIAppFonts。但是,根据您将要使用它的用途,您可能不需要它

作为一种解决方法,您可以在应用程序生命周期的任何时间动态加载字体,例如在静态库中的一些早期调用的init/setup方法中

参见Marco Arment的教程,代码如下:

NSData *inData = /* your decrypted font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

非常感谢@H2CO3的快速回答,我将要求开发人员在他们的plist文件中添加“UIAppFonts”设置。您能告诉我这是什么inData吗?是font.ttf或otf文件数据还是其他任何东西。我面前没有代码,但它应该是从实际的ttf/otf文件读取的字体数据,是的。您是否尝试过,但失败了?这在我们的Cocoa Touch框架内运行良好。按如下方式加载字体文件:NSString*fontPath=[[NSBundle bundleForClass:[ANYClassInYourFramework类]]pathForResource:@“fontfilename”,类型:@“ttf”];NSData*fontData=[NSData dataWithContentsOfFile:fontPath];