我知道我可以使用 获取字体家族名称列表,[UIFont familyNames]
并使用 遍历家族的字体名称[UIFont fontNamesForFamilyName:]
。有什么方法可以判断哪个字体名称代表“正常”字体?命名没有任何一致性(“罗马”,“常规”,甚至没有修饰形容词)。我最终试图在一个子字符串上更改字体,NSAttributedString
同时保持现有的特征和装饰。提前致谢。
问问题
247 次
2 回答
1
好吧,我需要更仔细地阅读 CoreText 文档。如果您使用正确的 CoreText 例程,则传入字体系列名称就足够了......
NSString *fontFamilyName = ...(font family name)...;
// Make a mutable copy of the attributed text
NSMutableAttributedString *workingAttributedText = [self.attributedText mutableCopy];
// Over every attribute run in the selected range...
[workingAttributedText enumerateAttributesInRange:self.selectedRange
options:(NSAttributedStringEnumerationOptions) 0
usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {
// get the old font
CTFontRef oldFont = (__bridge CTFontRef)[attrs objectForKey:NSFontAttributeName];
// make a new one, with our new desired font family name
CTFontRef newFontRef = CTFontCreateCopyWithFamily(oldFont, 0.0f, NULL, (__bridge CFStringRef)fontFamilyName);
// Convert it to a UIFont
UIFont *newFont = [UIFont fontWithCTFont:newFontRef];
// Add it to the attributed text
[workingAttributedText addAttribute:NSFontAttributeName value:newFont range:range];
}];
// Replace the attributed text with the new version
[self setAttributedText:workingAttributedText];
如果有更简单的方法可以做到这一点,我很想听听。
于 2013-01-29T21:02:07.120 回答
0
列表中不必有常规字体。有些可能只提供粗体或仅斜体。这就是为什么经常将列表提供给用户让他们做出决定的原因。
于 2013-01-29T18:14:52.610 回答