iOS排版大部分内容是理解(文本的)属性。属性是一组功能,如字体选择或文本颜色,应用(绘制)于一定范围内的文本。属性字符串,顾名思义,添加特征来选择子字符串。每个属性字符串都包含应用于该字符串的源文本和范围的特定属性。要了解属性的工作原理,请参考图8-4。它显示一个添加了前景色和阴影属性的字符串。
图8-4文本属性包括字体,颜色和阴影。 它们可以任意组合和重叠。
创建属性字符串
当使用排版特征构建文本时,您可以使用NSAttributedString
类的成员,更典型地,它可变(类型)的表亲NSMutableAttributedString
。可变版本提供更多的灵活性,允许您单独分层(罗列添加)属性,而不必一次性添加所有特征。
要创建一个不可修改的属性字符串,您可以分配它并使用文本和属性字典进行初始化。示例8-2绘制了与图8-1所示相同的大灰色“Hello World”,但这次使用属性字符串而不是NSString
实例。drawAtPoint:
方法从存储在字符串中的属性中获取所有细节,如文本颜色和字体。
示例8-2使用属性字典创建属性字符串
1 | // Create an attributes dictionary |
可变属性字符串
可变实例使您能够将每个属性单独添加到整个字符串(如示例8-3所示)或子范围(如图8-2所示)。您使用addAttribute:value:range:
请求来指定属性,范围和值。
其他方法可以使用字典设置属性,就像使用非可变实例(setAttributes:range:
)一样,或者在字符串范围内删除属性(removeAttributes:range:
)。 您还可以插入和追加属性字符串(insertAttributedString:atIndex:
和appendAttributedString:
)来构建复杂的实例。
最终,示例8-3使用与示例8-2相同的drawAtPoint:
入口点,绘制了与图8-1所示相同的大灰色“Hello World”输出。
示例8-3将属性分层(罗列添加)到可变属性字符串中
1 | // Build mutable attributed string |
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。