功能强大的 iOS 富文本编辑与显示框架:YYText

jopen 9年前

功能强大的 iOS 富文本编辑与显示框架。
(该项目是 YYKit 组件之一)

特性

  • API 兼容 UILabel 和 UITextView
  • 支持高性能的异步排版和渲染
  • 扩展了 CoreText 的属性以支持更多文字效果
  • 支持 UIImage、UIView、CALayer 作为图文混排元素
  • 支持添加自定义样式的、可点击的文本高亮范围
  • 支持自定义文本解析 (内置简单的 Markdown/表情解析)
  • 支持文本容器路径、内部留空路径的控制
  • 支持文字竖排版,可用于编辑和显示中日韩文本
  • 支持图片和富文本的复制粘贴
  • 文本编辑时,支持富文本占位符
  • 支持自定义键盘视图
  • 撤销和重做次数的控制
  • 富文本的序列化与反序列化支持
  • 支持多语言,支持 VoiceOver
  • 全部代码都有文档注释

架构

YYText 和 TextKit 架构对比

文本属性

YYText 原生支持的属性

Demo Attribute Name Class
TextBackedString YYTextBackedString
TextBinding YYTextBinding
TextShadow YYTextShadow
TextInnerShadow YYTextShadow
TextUnderline YYTextDecoration
TextStrickthrough YYTextDecoration
TextBorder YYTextBorder
TextBackgroundBorder YYTextBorder
TextBlockBorder YYTextBorder
TextAttachment YYTextAttachment
TextHighlight YYTextHighlight
TextGlyphTransform NSValue(CGAffineTransform)

YYText 支持的 CoreText 属性

Demo Attribute Name Class
Font UIFont(CTFontRef)
Kern NSNumber
StrokeWidth NSNumber
StrokeColor CGColorRef
Shadow NSShadow
Ligature NSNumber
VerticalGlyphForm NSNumber(BOOL)
WritingDirection NSArray(NSNumber)
RunDelegate CTRunDelegateRef
TextAlignment NSParagraphStyle
(NSTextAlignment)
LineBreakMode NSParagraphStyle
(NSLineBreakMode)
LineSpacing NSParagraphStyle
(CGFloat)
ParagraphSpacing
ParagraphSpacingBefore
NSParagraphStyle
(CGFloat)
FirstLineHeadIndent NSParagraphStyle
(CGFloat)
HeadIndent NSParagraphStyle
(CGFloat)
TailIndent NSParagraphStyle
(CGFloat)
MinimumLineHeight NSParagraphStyle
(CGFloat)
MaximumLineHeight NSParagraphStyle
(CGFloat)
LineHeightMultiple NSParagraphStyle
(CGFloat)
BaseWritingDirection NSParagraphStyle
(NSWritingDirection)
DefaultTabInterval
TabStops
NSParagraphStyle
CGFloat/NSArray(NSTextTab)

用法

基本用法

// YYLabel (和 UILabel 用法一致)  YYLabel *label = [YYLabel new];  label.frame = ...  label.font = ...  label.textColor = ...  label.textAlignment = ...  label.lineBreakMode = ...  label.numberOfLines = ...  label.text = ...    // YYTextView (和 UITextView 用法一致)  YYTextView *textView = [YYTextView new];  textView.frame = ...  textView.font = ...  textView.textColor = ...  textView.dataDetectorTypes = ...  textView.placeHolderText = ...  textView.placeHolderTextColor = ...  textView.delegate = ...

项目主页:http://www.open-open.com/lib/view/home/1447216582147