Domanda

Come posso utilizzare correttamente entrambi questi nella stessa UIView?

Ho un CALayer sottoclassato personalizzato in cui disegno uno schema in drawInContext

Ne ho un altro in cui ho impostato un'immagine PNG sovrapposta come contenuto.

Ne ho un terzo che è solo uno sfondo.

Come posso sovrapporre tutti e 3 questi elementi?

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

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

Gli altri 2 da soli disegnano correttamente se li faccio in quell'ordine. Indipendentemente da dove provo e metto bottomLayer, impedisce sempre ai quadrati di disegnare. Il motivo per cui ho bisogno di 3 livelli è che intendo animare i colori dello sfondo e i livelli personalizzati. Il livello superiore è solo una sovrapposizione grafica.

È stato utile?

Soluzione

Potrebbe anche incollare il codice nel caso in cui qualcuno stia cercando di animare CALayer in pila che hanno le proprie routine di disegno interne

- (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 è dove sto memorizzando informazioni su larghezza, altezza e immagine, è il controller per questo UIView.

topLayer e bottomLayer sono di una sottoclasse UIView personalizzata che disegna alcune forme nella vista con informazioni di colore variabile. Più avanti nella mia animazione ho appena eseguito " setNeedsDisplay " ripetutamente con un timer e questa routine si ripete, i livelli si ridisegnano usando parametri aggiornati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top