客户希望通过API调用下载它们来动态地将字体添加到iOS应用程序。
这可能吗?我已经挖掘的所有资源都显示了如何手动将.ttf文件拖到Xcode并将其添加到plist中。是否可以下载字体并以编程方式在即时客户端使用它?
感谢。
答案 0 :(得分:10)
好的,我的表现就是这样。首先需要这样做:
body {
padding-left: 180px;
padding-right: 250px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.logo {
height: 80px;
width: 300px;
}
.top-search {
height: 50px;
width: 400px;
margin-top: 10px;
}
然后进行NSURLSession调用。我的客户将字体上传到亚马逊的S3。所以在需要时这样做:
#import <CoreText/CoreText.h>
我的loadFont数据在这里:
// 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];
然后最后的fontTest只是为了确保字体实际存在,而在我的情况下,它就是!而且,当应用程序在需要的地方运行时,它会显示出来。
- (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];
}