返回信息流自己在写iOS论坛的客户端,现在在做文章的图文混排排版这.
爬了些楼,现在的解决方案是:用YYText框架,正则匹配到相应的表情字符,就把字符替换成表情图片gif.
如果一串文本里只有一个表情字符串就没问题,但是出现两个或者多个时...由于匹配是一次匹配得到一个数组,然后替换了第一个的时候,原来文本的长度就变化了,然后再替换第二个的时候就出错了....这种情况怎么处理?
我能想到的就是用递归,一次只匹配一个,匹配一个替换完了再去匹配下一个,但是这样也太慢了...有什么好的方法么?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #28729同步于 2016/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
[问题]iOS图文混排正则匹配到多个结果替换后位置长度变化?
chujunhe1234
2016/2/27镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
因为你用的是YYText 这个东西 其实。。。你得找用YYText的对应用法。。。最简单的方法是直接啃源码
coretext本身就不需要用这种思路去坐
把表情抽象成一个特殊的CTRun 无论有几个表情,都可以在一开始排版的时候,一次性把所有表情的长宽高,传给coretext,然后通过coretext 一次排版计算直接出结果的
既然YYText 是直接在coretext上封装的,对于这种常规需求,不会设计出这么蹩脚的使用方法的。。
具体怎样 还得去看YYText的接口怎么设计的。。。
源码啃不下去 那就只啃 API接口的 头文件
顺带 GIT上 YYText的 document 的数量很多。。。看那个吧
有更好用的框架么?匹配表情都这么麻烦,要是换图片不就更傻逼了...源码里貌似是这样做的:定义一个常量保存表情的偏移差,每次替换表情的时候,高度和文字是一样的,宽度可能不一样,就把替换的宽度和原宽度减一下,保存个offset,下次替换的时候加上这个offset.
【 在 apocalypse 的大作中提到: 】
【 在 chujunhe1234 的大作中提到: 】
: 有更好用的框架么?匹配表情都这么麻烦,要是换图片不就更傻逼了...源码里貌似是这样做的:定义一个常量保存表情的偏移差,每次替换表情的时候,高度和文字是一样的,宽度可能不一样,就把替换的宽度和原宽度减一下,保存个offset,下次替换的时候加上这个offset.
更好的框架?
我依然觉得你没有 弄明白 这个需求怎么使用YYText,不过我确实没用过YYText,我相信Git上文档会有很大帮助,我点进去过,文档数量很多很大了
主要是这个思路根本不是常规排版算法的路数。。本身就是个很常规的需求。。。啥二次封装排版工具也不应该设计成这样。。。设计都是抱着一次排版出结果的(如果排版中涉及的二次精矫,也是区域精矫,如有调整都不会影响后面已经排好的东西)
(恩 没用过 所以以上是猜测)
或者 直接使用系统 CoreText
顺带 AttributedLabel 用这个关键字 应该能搜出很多 第三方工具。。数量应该很多很多,但功能相对支持的简单的多
各种 XXXAttributedLabel
然后 你试着 一个一个筛选 看看 是不是简单些 够你的需求。。。我觉得应该有很多
至于这些工具的最大问题。。就是 估计想做出 长按能选择文字 复制。。。那就基本上绝对不可能了
完全从底层 coretext 入手 自己手写 长按文字选中。。这个就比较难。。
YYText 从git上的宣传demo来看 对复制长按选中文字 是有封装支持的 (没用过=。=细节未知)
恩,我再多看看.昨天才学的正则表达式怎么写.
【 在 apocalypse 的大作中提到: 】
: 顺带 AttributedLabel 用这个关键字 应该能搜出很多 第三方工具。。数量应该很多很多,但功能相对支持的简单的多
: 各种 XXXAttributedLabel
: 然后 你试着 一个一个筛选 看看 是不是简单些 够你的需求。。。我觉得应该有很多
: ...................
用YYText也是之前爬楼看有人问正则的问题你的回答的...可能是我还不会用,我再看看demo.
【 在 apocalypse 的大作中提到: 】
: 额 能想到的 就这些了 ╮(╯_╰)╭