主要控件TYAttributedLabel继承自UIView,
1.遵守代理TYAttributedLabelDelegate
TYAttributedLabelDelegate主要负责Link的点击代理、长按代理 有多个状态 begin, changes, end 都会调用,所以需要判断状态、长按非Container区域代理 有多个状态 begin, changes, end 都会调用,所以需要判断状态
2.主要属性
文字颜色、文字大小、行数、链接颜色、段落间距、字间距、对齐方式。。。。
TYTextContainer *textContainer 处理文本的(容器)管家
一系列方法 拼接Link、图片、对象等等
生成文本容器textContainer
-createTextContainerWithTextWidth
ImageTextViewController中 流程
1.添加屏幕滚动
2.添加addTextAttributedLabel1
2.1 TYAttributedLabel *label 创建并设置代理 ,添加到ScrollView
2.2 分割文本到textArray数组 colorArray随机颜色设置
2.3 追加图片URl(TYImageStorage对象)创建TYImageStorage对象 设置imageURL size
****Label appendTextStorage:TYImageStorage对象
TYAttributedLabel中
[_textContainer appendTextStorage:textStorage];
[self invalidateIntrinsicContentSize];
[self setNeedsDisplay];
此时的TYImageStorage对象继承自TYDrawStorage,遵守TYDrawStorageProtocol
2.3.1设置 fontAscent descent以便于对于计算高度
2.3.2 NSAttributedString *attAppendString = [textStorage appendTextStorageAttributedString];
替换成空白占位符,为这个占位符
添加文本属性和runDelegate 为图片设置CTRunDelegate,delegate决定留给显示内容的空间大小(此时attAppendString已经有了占位文本和CTRunDelegate)
2.3.3 [self appendTextAttributedString:attAppendString]; 上一步完成的(带有字体 和颜色 还有Range的)attAppendString 添加文本段落样式属性 和 字间距以及真正拼接
剩下的交给drawRect去执行
3.添加addTextAttributedLabel2
4.图片点击 和 图片长按代理方法
网友评论