iOS 中的动态字体下载需要每次启动都下载 com_apple_MobileAsset_Font.xml?
Dynamic font download in iOS need download com_apple_MobileAsset_Font.xml every launch?
我想在我的应用程序中使用动态字体。我在苹果的 sample code 中发现他们每次启动时都会下载 xml,即使我之前已经下载过该字体。
为什么?这个文件有什么用?
此示例代码是否存在错误,或者如果我想使用此功能,我需要接受此错误。
示例代码通常旨在引导开发人员朝着正确的方向前进,而不是为他们提供功能齐全且经过优化的解决方案。
您应该在下载后保存字体数据,然后在启动时您可以使用类似这样的代码在本地检索它。
+ (void)loadFontAtPath:(NSString *)path {
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
if (!data) {
NSLog(@"Failed to load font. Data at path is null");
return;
}
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (!CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
}
从那里你可以用 [UIFont fontWithName:size:]
正常称呼它。
另外向 URL 请求可能对您有用。 CTFontManagerRegisterFontsForURL
我想在我的应用程序中使用动态字体。我在苹果的 sample code 中发现他们每次启动时都会下载 xml,即使我之前已经下载过该字体。
为什么?这个文件有什么用?
此示例代码是否存在错误,或者如果我想使用此功能,我需要接受此错误。
示例代码通常旨在引导开发人员朝着正确的方向前进,而不是为他们提供功能齐全且经过优化的解决方案。
您应该在下载后保存字体数据,然后在启动时您可以使用类似这样的代码在本地检索它。
+ (void)loadFontAtPath:(NSString *)path {
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
if (!data) {
NSLog(@"Failed to load font. Data at path is null");
return;
}
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (!CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
}
从那里你可以用 [UIFont fontWithName:size:]
正常称呼它。
另外向 URL 请求可能对您有用。 CTFontManagerRegisterFontsForURL