Pregunta

¿Cómo puedo usar ambos en la misma UIView correctamente?

Tengo un CALayer subclasificado personalizado en el que dibujo un patrón dentro de drawInContext

Tengo otro en el que configuro una imagen PNG superpuesta como contenido.

Tengo un tercero que es solo un fondo.

¿Cómo superpongo los 3 de estos elementos?

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

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

Los otros 2 por sí mismos dibujan correctamente si los hago en ese orden. No importa dónde intente y ponga bottomLayer, siempre evita que squaresLayer se dibuje. La razón por la que necesito 3 capas es que tengo la intención de animar los colores en el fondo y las capas personalizadas. La capa superior es solo una superposición gráfica.

¿Fue útil?

Solución

También podría pegar el código en caso de que alguien esté tratando de animar CALayers apilados que tienen sus propias rutinas internas de dibujo

- (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 es donde estoy almacenando información de ancho, alto e imagen, es el controlador para esta UIView.

topLayer y bottomLayer son de una subclase personalizada de UIView que dibuja algunas formas en la vista con información de color variable. Más adelante, en mi animación, simplemente ejecuto "setNeedsDisplay". repetidamente con un temporizador y esta rutina se repite, las capas se vuelven a dibujar utilizando parámetros actualizados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top