2009-08-01 70 views
3

如何在同一個UIView中正確使用這兩個參數?CALayer drawInContext vs addSublayer

我有一個自訂子類的CALayer我在其中繪製內drawInContext

圖案我有一個另一個,其中我設置覆蓋PNG圖像作爲內容。

我有第三隻是背景。

如何疊加所有這3個項目?

[self.layer addSublayer:bottomLayer]; // this line is the problem 

[squaresLayer drawInContext:viewContext]; 
[self.layer addSublayer:imgLayer]; 

其他2自己畫正確,如果我按順序做他們。無論我在哪裏嘗試放置bottomLayer,它都會阻止squaresLayer繪圖。我需要3層的原因是我打算在背景和自定義圖層中設置動畫的顏色。頂層只是一個圖形覆蓋。

+0

幾個問題:你確定圖層沒有被繪製?或者它正在繪製,但沒有給你你正在尋找的結果?這些圖層如何重疊?是否有必要讓這些圖層都處於同一視圖中,還是可以將其中一個分解爲不同的視圖? – Amagrammer 2009-08-01 13:39:09

回答

1

還不如粘貼的情況下,任何人試圖動畫堆疊CALayers有自己內部的抽獎代碼例程

- (void)drawRect:(CGRect)rect { 

    [imgLayer removeFromSuperlayer]; 

    CGFloat w = [self.blockViewDelegate w]; 
    CGFloat h = [self.blockViewDelegate h]; 

    CGFloat wb = w/4; 
    CGFloat hb = h/4; 

    CGContextRef viewContext = UIGraphicsGetCurrentContext(); 

    // Layers 

    [bottomLayer sizes:wb :hb :1]; 
    bottomLayer.frame = CGRectMake(0, 0, w, h); 
    bottomLayer.opaque = NO; 

    [topLayer sizes:wb :hb :0]; 
    topLayer.frame = CGRectMake(0, 0, w, h); 
    topLayer.opaque = NO; 

    // Overlay 

    imgLayer.frame = CGRectMake(0, 0, w, h); 
    imgLayer.opaque = NO; 
    imgLayer.opacity = 1.0f; 

    UIImage *overlay = [self.blockViewDelegate image]; 
    CGImageRef img = overlay.CGImage; 
    imgLayer.contents = (id)img; 

    // Add layers 

    [bottomLayer drawInContext:viewContext]; 
    [topLayer drawInContext:viewContext]; 
    [self.layer addSublayer:imgLayer]; 

} 

blockViewDelegate是我在哪裏存儲的寬度,高度和圖像信息,它是這個UIView的控制器。

topLayer和bottomLayer是一個自定義UIView子類,它使用可變的顏色信息在視圖中繪製一些形狀。後來在我的動畫中,我只是用定時器重複運行「setNeedsDisplay」,並重復這個例程,使用更新的參數重新繪製圖層。

相關問題