BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #28729同步于 2016/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

[问题]iOS图文混排正则匹配到多个结果替换后位置长度变化?

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