我想在 iPad 上显示由许多绿色、红色或黑色小矩形组成的音频表。他们不需要花哨,但可能有很多。我正在寻找快速绘制它们的最佳技术。以下哪种技术更好:CALayers 或 OpenGLES 中的文本图集或其他?
感谢您在问题因过于宽泛而关闭之前的回答。不幸的是,我无法缩小问题的范围,因为我不知道要使用哪种技术。如果我知道答案,我可以使问题变得非常狭窄。
我想在 iPad 上显示由许多绿色、红色或黑色小矩形组成的音频表。他们不需要花哨,但可能有很多。我正在寻找快速绘制它们的最佳技术。以下哪种技术更好:CALayers 或 OpenGLES 中的文本图集或其他?
感谢您在问题因过于宽泛而关闭之前的回答。不幸的是,我无法缩小问题的范围,因为我不知道要使用哪种技术。如果我知道答案,我可以使问题变得非常狭窄。
另一种方法是在 CALayers 中使用纹理图集。您可以将 9 组框绘制到一个图像中(0-8 框上),然后在屏幕上创建 300 个 CALayers,所有这些都使用它作为它们的内容。在每一帧中,您切换每一层以指向它需要使用的纹理图集的一部分。我以前从来没有用 300 层做过这个,所以我不知道这是否会成为一个问题——我只用了半打左右的数字来更新每一帧,但效果非常好。有关更多信息,请参阅此博客文章:
http://supermegaultragroovy.com/2012/11/19/pragma-mark-calayer-texture-atlases/
最快的绘图是在自定义视图中使用 OpenGLES。
重复绘制的最好方法是避免在屏幕上绘制它。由于音频表往往会频繁更新,但它们的大部分区域保持不变,因为音频信号相对平滑,您应该跟踪绘制的内容,并仅绘制差异。
例如,如果您在之前的更新中绘制了一个有五十个绿色方块的信号表,而现在您需要绘制四十八个绿色方块,您应该只重新绘制与之前更新不同的两个方块。这应该可以为您节省很多石英调用。
将渲染推迟到绝对必要的程度,即假设您正在使用 CoreGraphics 进行绘制,使用路径,并且仅在您将所有矩形添加到路径时才描边/填充路径。