UITextKit in Action

Glyph与Character Characters versus Glyphs

Text Kit指的是UIKit框架中用于提供高质量排版服务的一些类和协议,它让程序能够存储,排版和显示文本信息,并支持排版所需要的所有特性,包括字距调整、连写、换行和对齐等。

动态字体(Dynamic type

根据用户在 设置–>通用–>字体大小里面的设置,程序自动调整字体的大小以及样式,当用户调整字体大小时,会向所有的应用发送 UIContentSizeCategoryDidChangeNotification 的通知。

self.textView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(preferredContentSizeChanged:)
name:UIContentSizeCategoryDidChangeNotification
object:nil];

-(void)preferredContentSizeChanged:(NSNotification *)notification{
self.textView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
}

凸版印刷体效果(Letterpress effects)

为字体加上阴影和高光的效果

1
2
3
4
5
6
NSDictionary *attributes = @{  
NSForegroundColorAttributeName: [UIColor redColor],
NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline],
NSTextEffectAttributeName: NSTextEffectLetterpressStyle
};
self.titleLabel.attributedText = [[NSAttributedString alloc] initWithString:@"Title" attributes:attributes];

路径排除(Exclusion paths)

按照给定的路径,在布局文本的时候绕开路径包含的范围

UIBezierPath *floatingPath = [self pathOfImage];
self.textView.textContainer.exclusionPaths = @[floatingPath];

重点理解textView 的textContainer 属性。

动态文本格式化和存储(Dynamic text formatting and storage)

图解原理

通过规则实现对文本里面的某些文本给予不一样的格式(字体、颜色等)

更多效果,可以查看NSAttributedString 的属性

NSStringAttribute

就像HTML一样,用来描述一段文本的样式,字体,大小,可通过区间来设置某几个文字。还有整体的字间距,行间距。

Feature

  • Exclusion paths
  • NSTextContainer
  • Glyphs
  • Text attachments

图文混排

http://stackoverflow.com/questions/9743697/attributed-string-looses-attachment-in-pasteboard-paste

http://stackoverflow.com/questions/22485486/nstextattachment-and-touch-events

http://stackoverflow.com/questions/19318092/how-to-detect-touch-on-nstextattachment

Copy, Cut, and Paste Operations

REF::