使用CoreText实现的一个富文本显示组件
来源:互联网 发布:淘宝网男装新款 编辑:程序博客网 时间:2024/05/01 09:29
开发移动应用,无法避开的一个问题就是富文本的展示和图文混排。之前一直使用DTCoreText这个非常强大的第三方库。但是有时候可能需求不是很大,大到需要使用这个工具的地步,而且DTCoreText的体量也不小,导入比较麻烦。最近研究了下CoreText这个框架,尝试着写了一个组件。CoreText的一些基本概念就不赘述了,网上这些方面的资料比较多。以下讲讲图文混排时遇到一些问题。
一、图片的显示
二、点击的捕获
可以在view的touch事件中获取到点击的落点,但是注意这个point的默认坐标系是在左下角,而在做CoreText的展示时,使用的坐标系是左上角,所以需要把这个落点进行一个坐标系的转换。
获取到落点后,可以根据之前保存的frame来计算出所在的run,以及所对应的string。但是这样做有个问题。比如一个url太长,被放到两行中显示,由于所属的line不一样,所以自然无法获取到完整的url串。所以笔者采用了实现分析出哪些是可以响应点击的字符,将他们所分布的run所在的rect保存起来,这样在点击任意一处时,可以获取到整个响应字符串,同时可以为他们绘制点击背景色。同时由于这么一个数据结构的存在,可以为每个响应串添加一个附属信息,以便返回给代理,为进一步的处理提供必要的信息。
以上所说的,都在https://github.com/skk5/SSCoreText.git
这个组件完全使用UIView绘制,不使用UIButton这种控件。可以在例子中看到使用方法。
不足:
1.可能需要写的代码比较多,因为没有默认的标签,完全需要自定制。
2.在设置段落属性中,tabstop这个还没解决。如果是在iOS7.0下可以使用系统的NSParagraphStyle。
3.在文字环绕文本中,表情的环绕有点问题,尚待解决。
4.文本的解析,是笔者自己写的,可能需要优化。而且使用的标签搜索策略是懒惰策略。
5.未使用多线程。 本来想添加一个后台解析的功能,但是考虑到多线程的配合和管控问题,还是交由用户来实现,代码也不复杂,用户完全可以自行分离并添加多线程功能。毕竟笔者写的是一个展示组件,而不是一整套的解决方案。
优点就是轻量、易用易懂。
本文欢迎转载,转载请注明出处。
- 使用CoreText实现的一个富文本显示组件
- coreText自定义富文本Label
- coreText自定义富文本Label
- coreText自定义富文本Label
- coreText自定义富文本Label
- 富文本,NSAttributedString 与 coreText
- 富文本的使用
- 富文本(TYAttributedLabel 简单,强大的属性文本控件(无需了解CoreText),支持图文混排显示,支持添加链接,image和UIView控件,支持自定义排版显示)
- IOS 使用CoreText实现表情文本URL等混合显示控件
- IOS 使用CoreText实现表情文本URL等混合显示控件
- IOS 使用CoreText实现表情文本URL等混合显示控件
- IOS 使用CoreText实现表情文本URL等混合显示控件
- 使用NSMutableAttributedString 实现富文本
- Android 使用富文本显示web上的内容
- coreText自定义富文本Label by Gphone
- coreText自定义富文本Label by Gphone
- coreText自定义富文本Label by Gphone
- NSMutableAttributedString富文本的实现
- 学习笔记---网络编程
- static修饰的类属性
- 编码素养5:减少冗余代码-让一段方法Template-callback
- ZOJ-1195
- bzoj1854 [Scoi2010]游戏
- 使用CoreText实现的一个富文本显示组件
- jsp、el、jstl——前端面试
- java8 - 方法引用(method referrance)
- HDU2955概率背包
- 华为测试 超长整数相加
- UVA 10010 (暑假-字符串(2) -A - Where's Waldorf?)
- C语言里面的内联函数(inline)与宏定义(#define)探讨
- java学习笔记——java中对象的创建,初始化,引用的解析
- C++学习笔记32 谓词函数