【问题标题】:Table view's layer seems to be affecting sibling layers表格视图的图层似乎正在影响兄弟图层
【发布时间】:2012-03-18 16:30:04
【问题描述】:

我有一个有趣的问题,涉及核心动画层层次结构中同级层之间的关系。这是我的层次结构:

Animation layer: <CALayer: 0x7ccf060> <--- custom animation layer

Content view's sublayers: (
    "<CALayer: 0x7e7db10>", <--- map view layer
    "<CALayer: 0x7cbfe10>", <--- table view layer
    "<CALayer: 0x7ccf060>"  <--- custom animation layer
)

所以我在层树中有几个层,其中一个是我为动画创建的层(它包含几个子层,所有子层的内容都来自CGImageRef)。

很明显,动画层是表视图层的兄弟,而不是子层。然而,发生的事情是这个自定义动画层的偏移与表格视图的contentOffset 成正比,即我滚动了多少。就我而言,动画层实际上是表格视图的图像表示。

这是在我将动画层作为同级插入之前,表格视图向下滚动的样子:

紧接着,当我将表格视图的图层渲染到CGImageRef 并将其用作常规CALayercontents 属性的源内容时:

同样,图层内容只是表格视图图层的图像表示,所以我看不出contentOffset 会如何影响其他图层。也许如果我将图层添加为表格视图图层的子图层,也许我可以看到哪里会出现问题。但是这个动画层是兄弟层,为什么会影响什么?

这是我也记录的动画层的帧:

Animation layer's frame: {{0, 0}, {320, 372}}

【问题讨论】:

    标签: iphone uitableview core-animation calayer layer


    【解决方案1】:

    我假设滚动视图正在做一些花哨的分层等工作以优化渲染。这意味着由于您的动画层的帧是正确的,实际上是层的渲染有问题,这将需要对滚动视图偏移量进行负偏移以进行补偿。

    当首先渲染时,将 Context 负数转换为 scrollViews 偏移量 CGContextTranslateCTM(ctx, -contentOffset.x, -contentOffset.y);然后用 [layer renderInContext:ctx] 渲染;

    【讨论】:

    • 太棒了!这非常有效。我不知道表格视图的图层内容是基于其边界的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2010-12-06
    • 2013-04-26
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多