表视图的层似乎正在影响兄弟层

时间:2012-02-29 07:01:53

标签: iphone uitableview core-animation calayer layer

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

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成正比,即我滚动了多少。在我的例子中,动画层实际上是表视图的图像表示。

这是表格视图在我将动画图层作为兄弟插入之前向下滚动的内容:

before http://f.cl.ly/items/0H3Q283V1Z2v0h0c3t10/iOS%20Simulator%20Screen%20shot%20Feb%2028,%202012%2010.47.42%20PM.png

这是紧接着,当我将表格视图的图层渲染为CGImageRef并将其用作常规CALayer的{​​{1}}属性的源内容时:

after http://f.cl.ly/items/0U1b2L351T3J0j0j1t0F/iOS%20Simulator%20Screen%20shot%20Feb%2028,%202012%2010.29.30%20PM.png

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

这是我也记录的动画层的框架:

contentOffset

1 个答案:

答案 0 :(得分:4)

我假设scrollview正在做一些花哨的工作,使用分层等来优化渲染。这意味着,由于您的动画层的帧是正确的,因此它实际上是图层渲染的错误,它需要负向偏移到滚动视图偏移以进行补偿。

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

进行渲染