MSc*_*ler 5 fonts objective-c truetype ios
客户希望通过API调用下载它们来动态地将字体添加到iOS应用程序.
这可能吗?我挖掘的所有资源都显示了如何手动将.ttf文件拖到Xcode并将其添加到plist中.是否可以下载字体并以编程方式在即时客户端使用它?
谢谢.
MSc*_*ler 10
好的,所以这就是我做的.首先需要这样做:
#import <CoreText/CoreText.h>
Run Code Online (Sandbox Code Playgroud)
然后进行NSURLSession调用.我的客户将字体上传到亚马逊的S3.所以在需要时这样做:
// 1
NSString *dataUrl = @"http://client.com.s3.amazonaws.com/font/your_font_name.ttf";
NSURL *url = [NSURL URLWithString:dataUrl];
// 2
NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 4: Handle response here
if (error == nil) {
NSLog(@"no error!");
if (data != nil) {
NSLog(@"There is data!");
[self loadFont:data];
}
} else {
NSLog(@"%@", error.localizedDescription);
}
}];
// 3
[downloadTask resume];
Run Code Online (Sandbox Code Playgroud)
我的loadFont数据在这里:
- (void)loadFont:(NSData *)data
{
NSData *inData = data;
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);
[self fontTest];
}
Run Code Online (Sandbox Code Playgroud)
那么最后的fontTest只是为了确保字体实际存在,而在我的情况下,它就是!而且,当应用程序在需要的地方运行时,它会显示出来.
- (void)fontTest
{
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++) {
NSString *fontFamily = [fontFamilies objectAtIndex:i];
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
NSLog (@"%@: %@", fontFamily, fontNames);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |