CodeV

8.3-文本属性

iOS排版大部分内容是理解(文本的)属性。属性是一组功能,如字体选择或文本颜色,应用(绘制)于一定范围内的文本。属性字符串,顾名思义,添加特征来选择子字符串。每个属性字符串都包含应用于该字符串的源文本和范围的特定属性。要了解属性的工作原理,请参考图8-4。它显示一个添加了前景色和阴影属性的字符串。

图8-4

图8-4文本属性包括字体,颜色和阴影。 它们可以任意组合和重叠。

创建属性字符串

当使用排版特征构建文本时,您可以使用NSAttributedString类的成员,更典型地,它可变(类型)的表亲NSMutableAttributedString。可变版本提供更多的灵活性,允许您单独分层(罗列添加)属性,而不必一次性添加所有特征。

要创建一个不可修改的属性字符串,您可以分配它并使用文本和属性字典进行初始化。示例8-2绘制了与图8-1所示相同的大灰色“Hello World”,但这次使用属性字符串而不是NSString实例。drawAtPoint:方法从存储在字符串中的属性中获取所有细节,如文本颜色和字体。

示例8-2使用属性字典创建属性字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Create an attributes dictionary
NSMutableDictionary *attributes =
[NSMutableDictionary dictionary];

// Set the font
attributes[NSFontAttributeName] =
[UIFont fontWithName:@"Futura" size:36.0f];

// Set the foreground color
attributes[NSForegroundColorAttributeName] =
[UIColor grayColor];

// Build an attributed string with the dictionary
attributedString = [[NSAttributedString alloc]
initWithString:@"Hello World" attributes: attributes];

// Draw the attributed string
[attributedString drawAtPoint: drawingPoint];

可变属性字符串

可变实例使您能够将每个属性单独添加到整个字符串(如示例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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Build mutable attributed string
attributedString = [[NSMutableAttributedString alloc]
initWithString:@"Hello World"];

// Set the range for adding attributes
NSRange r = NSMakeRange(0, attributedString.length);

// Set the font
[attributedString
addAttribute:NSFontAttributeName
value:[UIFont fontWithName:@"Futura" size:36.0f] range:r];

// Set the color
[attributedString
addAttribute:NSForegroundColorAttributeName
value:[UIColor grayColor] range:r];

// Draw the attributed string
[attributedString drawAtPoint: inset.origin];

本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。