我想制作一个应用程序以包含自定义字体以渲染文本,加载它,然后与标准的UIKit
元素(如UILabel
)一起使用。这是否可行?
我想制作一个应用程序以包含自定义字体以渲染文本,加载它,然后与标准的UIKit
元素(如UILabel
)一起使用。这是否可行?
正如之前所有回答所指出的那样,在较新版本的iOS中实现起来非常容易。
我知道这不是一个技术性的回答,但由于很多人都会犯错(从而有效地违反了许可证,如果您被起诉可能会花费您很多钱),所以让我强调一点:在iOS(或任何其他类型)应用程序中嵌入自定义字体基本上就是“再分发”该字体。大多数商业字体的许可证都禁止再分发,因此请确保您按照许可证行事。
-(void)viewDidLoad
中,在[super viewDidLoad]
之后(或在应用程序委托中):NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray array];
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
[system_fonts addObject:fontName];
}
}
if([paths count] > 0) {
[system_fonts writeToFile:[[paths objectAtIndex:0]
stringByAppendingPathComponent:@"array.out"] atomically:YES];
}
运行应用程序一次。之后停止它。
步骤2:将自定义字体添加到项目中
使用接受的答案中所示的方法,添加您的自定义字体(记得更新.plist
并通过选中添加到目标
将字体文件添加到构建中。
步骤3:将系统字体与当前字体列表进行比较
将步骤1中的代码替换为:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray arrayWithContentsOfFile:[[paths objectAtIndex:0]
stringByAppendingPathComponent:@"array.out"]];
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
if (![system_fonts containsObject:fontName]) {
NSLog(@"%@", fontName);
}
}
}
运行应用程序,将显示您添加的自定义字体列表。
这适用于iOS 3.2到iOS 6(未来版本可能也可以正常工作)。同样适用于.ttc
和.ttf
文件。