Text Rendering iOS - 渲染快速变化文本的最高效方式

Posted

技术标签:

【中文标题】Text Rendering iOS - 渲染快速变化文本的最高效方式【英文标题】:Text Rendering iOS - Most performant way to render fast changing text 【发布时间】:2014-12-22 12:00:52 【问题描述】:

ios 中呈现快速变化的文本(每帧改变 10-15 个数字)最高效的方法是什么?这些是我到目前为止所做的尝试:

1) CATextLayer + CTFontNSString:非常快,但无法访问我需要的字距调整。 (如果有人知道如何让字距调整与CTFont 和没有NSAttributedString 一起工作,那也很酷,但这不是主要问题;)

2) CATextLayer + NSAttributedString: 缓慢而滞后。与 1) 相比,我看到 FPS 大幅下降。在我的应用中,这个变化让 FPS 从 50-60 下降到 30。

3) 位图字体,使用UIImageViewsUIImage 显示数字:也相当快,虽然不是很令人满意,因为iOS 中应该有更好/更自然的方式来有效地渲染字体。

编辑:

4) UILabel + NSString - 相当快,但同样无法使用字距调整。

5) UILabel + NSAttributedString - 又慢又迟钝。

渲染NSAttributedString 比渲染基本NSString 慢很多。这真的很令人沮丧,因为我现在需要NSAttributedString 提供的只是字母之间的间距。

【问题讨论】:

一个很好的以性能为导向的问题。顺便说一句,你是不是简单地尝试了一个 UILabel,看看苹果工程师做了什么? 谢谢,我刚试过(编辑成问题),只要你不使用我需要更改字距的属性文本,它就相当快了。 也许可以尝试使用带有单一字体纹理的 Sprite Kit,以便更快地对基于图像的字体进行位图位图处理——假设 Sprite Kit 批处理这些绘制调用并且擅长此操作。 SKView 到.... textscue。 您是否尝试过使用CFAttributedStringCTFont 应用字距调整? 【参考方案1】:

Apple 最近在 iOS 中添加了 TextKit,您可以先检查一下:TextKit documentation。

【讨论】:

以上是关于Text Rendering iOS - 渲染快速变化文本的最高效方式的主要内容,如果未能解决你的问题,请参考以下文章

Unity渲染路径 Rendering Paths_2_Forward Rendering 正向渲染

《Real-Time Rendering》第四版学习笔记——Chapter 1 Introduction

基于OpenGL编写一个简易的2D渲染框架-05 渲染文本

什么是字体渲染(Font Rendering)?

NV_path_rendering 替代方案 [关闭]

gsv_text 渲染ASCII字符