【问题标题】:CALayer overwrites contents-image with backgroundCALayer 用背景覆盖内容图像
【发布时间】:2015-09-11 09:46:51
【问题描述】:

我有一个带有自定义 CALayer 的自定义 UIView。图层覆盖 -(void)display;将 CGImageRef 分配给图层内容属性。原则上,这按预期工作(大部分时间),但在某些设备上,视图有时会变成纯白色。其实我可以通过设置背景颜色来选择颜色。

某些设备意味着:在我的 3 个测试设备中,只有带有 iOS7 的 iphone5 失败。 iPhone6+ 和 iPad 都支持 iOS8。

有时意味着:原则上它也适用于不良设备,但有大约 50-50 的机会获得实际图像或纯背景...

(我正在等待一些测试人员的反馈以获得更好的统计数据)

实际上我希望弄清楚层或视图(作为委托)的什么方法我必须覆盖空来阻止这种丑陋的行为。

或者,我将尝试将我的图层添加为普通视图图层的子图层。但我想避免这种情况,因为我最终会得到 2 层的视图,这非常大......

希望有人能给我一些提示... 提前致谢

更新:不限于 iOS7 我也有来自运行 iOS8.4 的 iPad 的报告...

更新 2: 我发现了更多信息。在我看来,这不是图层合成的问题,而是 CGBitmapContext 的问题。
我创建了一个位图上下文并持有对它的引用,以便在保留一些旧内容的同时呈现其他部分。
之后我调用 CGBitmapContextCreateImage() 并将生成的图像设置为图层的内容。
该图像不会包含我渲染的所有内容。 为了进行测试,我实现了可以通过触摸事件触发内容更新:

  • 如果我保留对图像的引用并将相同的图像再次设置为内容 porperty,则表明相同的区域保持白色(因此实际上图层正确显示图像)
  • 如果我再次调用 CGBitmapContextCreate() 并将结果设置为图层的内容,则图像已完成。同时,位图上下文没有变化。这意味着对 CGBitmapContextCreate() 的 2 次后续调用会返回不同的图像?!?

    -

【问题讨论】:

    标签: ios objective-c calayer cgcontext


    【解决方案1】:

    我不再想通了。我开始认为它是核心图形/动画中的一个错误。或者被我虐待。这只发生在相当大的视图中。

    第一次尝试使用 CATiledLayer 不会让我很高兴,但似乎是一种可行的方法......或者至少是一个指向我将重新组织我的代码的方向的指针......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多