2009-08-01 64 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”,并重复这个例程,使用更新的参数重新绘制图层。

相关问题