【发布时间】: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