CATextLayer快速更改文本

时间:2013-08-12 23:00:48

标签: ios performance core-graphics uilabel core-text

我正在开发一个需要更改很多 CATextLayers字符串的应用,但是,只有一两个字符(一般情况下,字符串长度约为2-5)字符)。

起初我选择的UILabels速度非常慢,因此我试用了CATextLayer,速度要快得多,但速度不够快,我经常更新大约150个CATextLayers,而且只是没有削减它,我觉得有点滞后。

然后我尝试用CoreText进行更低级别的操作,我尝试使用CTLine绘制它,它与CATextLayer的性能大致相同,所以我回到了CATextLayers,因为我的CoreText定位代码不是'完美。

我开始考虑为每个字符串缓存前两个字符(总是不变的),只更改其他3个字符,边界较小,我认为它会更快一些,但是,它会更快吗?毕竟它会将它与其他文本层合成,并且必须更新所有150个文本层。

有人有什么建议吗?你会怎么做?

附件是工具的屏幕截图,显示问题在于CATextLayer的性能:instruments time profile

1 个答案:

答案 0 :(得分:1)

位图字体可能是解决这个问题的最佳方法,因为对于这种性质的东西,它们在字体绘制方面的性能远远超过其他任何方面。但是你需要预先渲染它们,以达到你想要的视觉效果和性能方面的最佳效果。

你可能最好使用Sprite Kit,因为它有本机处理它们。这是一个github仓库,它有一个有用的东西,可以更容易地使用常用工具中的渲染位图来创建它们:https://github.com/tapouillo/BMGlyphLabel