【问题标题】:One CGImageRef for multiple CALayers一个 CGImageRef 用于多个 CALayers
【发布时间】:2012-11-13 16:04:28
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: core-animation calayer


    【解决方案1】:

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

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

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

    【讨论】:

    • 由于 3 天内没有人发表评论,我将自己的答案标记为正确。
    • 我肯定安装了CGImage对象作为CALayers的内容。说你只能安装一个 UIImage 作为内容是错误的。事实上,当你说你可以使用 UIImage 时,我很惊讶。我一直使用 CGImage。
    • 不知道系统会不会在图层之间共享同一个CGImage。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多