2012-02-29 47 views
1

我有一個有趣的問題,涉及核心動畫層次結構中兄弟層之間的關係。這裏是我的層次:表視圖的層似乎正在影響兄弟層

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並使用它作爲源內容的定期CALayercontents屬性:

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

同樣,圖層內容僅僅是表視圖圖層的圖像表示,所以我看不到contentOffset會如何影響這個其他圖層。也許如果我將圖層添加爲表視圖圖層的子圖層,也許我可以看到哪裏會出現問題。但是這個動畫層是兄弟層,爲什麼它會影響任何東西?

這裏是動畫層的框架,我已經還記錄:

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

回答

4

我假設了滾動做有層次感等優化渲染一些花哨的工作。這意味着由於你的動畫層的框架是正確的,所以對於圖層的渲染實際上是錯誤的,這將需要負面地偏移到滾動視圖偏移以補償。

當渲染首先將Context負面翻譯爲scrollViews偏移CGContextTranslateCTM(ctx,-contentOffset.x,-contentOffset.y);然後使用[layer renderInContext:ctx]進行渲染;

+0

太棒了!這工作完美。我不知道表視圖的圖層內容是基於其邊界的。 – LucasTizma 2012-02-29 23:21:37