gpt4 book ai didi

iphone - CALayer drawInContext 与 addSublayer

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:41 26 4
gpt4 key购买 nike

如何在同一个 UIView 中正确使用这两个?

我有一个自定义子类 CALayer,我在其中绘制了 drawInContext 中的图案

我有另一个,我在其中设置了一个覆盖 PNG 图像作为内容。

我有三分之一只是背景。

如何叠加所有这 3 个项目?

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

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

如果我按照这个顺序,其他 2 个自己就可以正确绘制。无论我尝试将 bottomLayer 放在哪里,它总是会阻止 squaresLayer 绘制。我需要 3 层的原因是我打算为背景和自定义层中的颜色设置动画。顶层只是一个图形覆盖层。

最佳答案

不妨粘贴代码,以防有人试图为具有自己的内部绘制例程的堆叠 CALayer 制作动画

- (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 的 Controller 。

topLayer 和 bottomLayer 是自定义的 UIView 子类,它们在 View 中绘制一些具有可变颜色信息的形状。后来在我的动画中,我只是用计时器重复运行“setNeedsDisplay”,然后重复这个例程,使用更新的参数重新绘制图层。

关于iphone - CALayer drawInContext 与 addSublayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com