我有一个有趣的问题,涉及核心动画层层次结构中兄弟层之间的关系。这是我的层次结构:
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
并将其用作常规CALayer
的{{1}}属性的源内容时:
同样,图层内容仅仅是表格视图图层的图像表示,因此我看不到contents
如何影响其他图层。也许如果我将图层添加为表视图图层的子图层,也许我可以看到哪里会出现问题。但是这个动画层是一个兄弟层,为什么它会影响任何东西呢?
这是我也记录的动画层的框架:
contentOffset
答案 0 :(得分:4)
我假设scrollview正在做一些花哨的工作,使用分层等来优化渲染。这意味着,由于您的动画层的帧是正确的,因此它实际上是图层渲染的错误,它需要负向偏移到滚动视图偏移以进行补偿。
渲染时首先将Context负数转换为scrollViews偏移量CGContextTranslateCTM(ctx,-contentOffset.x,-contentOffset.y);然后使用[layer renderInContext:ctx];
进行渲染