1

最近我一直在尝试用不同的技术在 iOS 上绘制 2D 精灵(CoreAnimation、UIViews、CGContext 和 Open GL ES)。我从 CoreAnimation 获得的最佳性能与开发时间,所以我会坚持下去(暂时)。

为了显示位图,我使用了 CALayers——它工作得很好,并且不比 Open GL 慢多少。有多种模式经常重复(这是平台游戏的典型特征)。出于节省内存的原因,我想为多个 CALayer 重用存储的图像。

我可以这样做吗?如何?我想像:

  1. 将位图以任何形式(UIImage?)存储在内存中
  2. 从 UIImage 获取 CGImageRef
  3. 将 CGImageRef 应用于应显示该位图的每个 CALayer

这实际上是否只存储指向每个图层的位图的指针,或者“Apple-magic”是否为每个 CALayer 创建位图的副本?

谢谢你。

4

1 回答 1

0

在创建了一个 iOS 项目来测试之后,这是我的结论:

  • 您可以将内容(类型 id)设置为 UIImage。时期。所以恕我直言,类型 id 是没用的:它应该是 UIImage
  • 因此:您不能将内容设置为 CGImageRef 类型(如果您使用 __bridge id),内容为 nil 并且不会生成错误(与 Apple 文档相反,该文档说这适用于基于 afaik 的 iOS 的 MacOS X 10.6 及更高版本) .

我发现如果不为每个使用 CALayer 的 tilebitmap 使用 RAM,就无法多次显示一个 tile。您必须使用 OpenGL ES 才能做到这一点。

于 2012-11-18T16:13:04.917 回答