先说层次关系,TextKit是对CoreText的封装,这个是Apple做的封装,避免了我们直接操作CoreText的麻烦,毕竟CoreText是C写的。主要是通过NSTextStorage,NSLayoutManager,NSTextContainer等类去处理文本的存储和文本布局的。
NSTextStorage,表示存储一段需要被处理的原始文本字符串,它是NSMutableAttributedString的subclass,同样保存着该文本字段的属性设置。该类长用来管理NSLayoutManager的增减。
- (void)addLayoutManager:(NSLayoutManager *)aLayoutManager;
- (void)removeLayoutManager:(NSLayoutManager *)aLayoutManager;
NSLayoutManager,文本布局的管理对象,管理着NSTextContainer对象,负责对文的渲染。
NSTextContainer,决定能够显示内容的区域。
应用
UITextView是UITextContainer的接受者,我们可以通过UITextContainer创建一个textview对象。
[UITextView alloc]initWithFrame:<#(CGRect)#> textContainer:<#(nullable NSTextContainer *)#>];
创建textContainer对象时候,同步创建了NSLayoutManager对象和NSTextStorage对象。
NSString * text = @"日照香炉生紫烟,遥看瀑布挂前川。/n
飞流直下三千尺,疑是银河落九天。"
paragraphyDict = [NSMutableDictionarydictionary];//富文本的各种段落属性
UIColor*textColor = [UIColorhexString:@"#666666"];
[paragraphyDict setValue:textColor forKey:NSForegroundColorAttributeName];
UIFont*textFont = [UIFontsystemFontOfSize:13.f];
[paragraphyDict setValue:textFont forKey:NSFontAttributeName];
//创建段落样式
NSMutableParagraphStyle *style= [[NSMutableParagraphStyle alloc] init];
style.lineSpacing =8.5f;
style.paragraphSpacing =25.f;
style.firstLineHeadIndent =20.f;
[paragraphyDict setValue:style forKey:NSParagraphStyleAttributeName];
returnattributes;
}
_textStorage = [NSTextStorage alloc]initWithString:text attributes:paragraphyDict];
//
_layoutManager = [[NSLayoutManager alloc] init];
[_textStorage addLayoutManager:_layoutManager];
//textContainer 对象
_textContainer = [[NSTextContainer alloc] init];
CGFloat width = SCREEN_WIDTH -20*2;
CGSize size = CGSizeMake(width, MAXFLOAT);
_textContainer.size = size;
[_layoutManager addTextContainer:_textContainer];
这是textkit应用的一种最简单的基本用法。
网友评论