1

我正在开发一个需要更改大量CATextLayers 字符串的应用程序,但是,它只有一个或两个字符(通常,字符串的长度约为 2-5 个字符)。

起初我使用非常慢的 UILabel,因此我尝试了 CATextLayer,它快了很多,但不够快,我经常一次更新大约 150 个 CATextLayer,但它只是没有切吧,我觉得有点滞后。

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

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

有人有什么建议吗?你会如何处理它?

附件是来自仪器的屏幕截图,显示问题出在 CATextLayer 的性能上:仪器时间曲线

4

1 回答 1

1

位图字体可能是解决此问题的最佳方法,因为在这种性质的字体绘制方面,它们的性能远远超过其他任何东西。但是您需要将它们预渲染到您希望在视觉和性能方面充分利用它们的规模。

你可能最好使用 Sprite Kit,因为它对它们进行了本地处理。这是一个 github 存储库,其中包含一个有用的东西,可以更轻松地使用来自通用工具的渲染位图来创建它们: https ://github.com/tapouillo/BMGlyphLabel

于 2014-04-16T05:05:33.703 回答