Question

Comment puis-je utiliser les deux dans le même UIView correctement?

J'ai une couche CALayer sous-classée personnalisée dans laquelle je dessine un motif dans drawInContext

J'ai une autre dans laquelle je définis une image PNG en superposition comme contenu.

J'ai un troisième qui est juste un fond.

Comment superposer ces 3 éléments?

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

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

Les 2 autres par eux-mêmes dessinent correctement si je les fais dans cet ordre. Peu importe où j'essaie de mettre bottomLayer, cela empêche toujours squaresLayer de dessiner. La raison pour laquelle j'ai besoin de 3 calques est que j'ai l'intention d'animer les couleurs de l'arrière-plan et des calques personnalisés. La couche supérieure est juste une superposition graphique.

Était-ce utile?

La solution

Vous pouvez également coller le code au cas où quelqu'un essaierait d'animer des CALayers empilés disposant de leurs propres routines de dessin internes

- (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 est l'endroit où je stocke la largeur, la hauteur et les informations sur l'image, c'est le contrôleur pour cette vue UIV.

topLayer et bottomLayer appartiennent à une sous-classe UIView personnalisée qui dessine certaines formes dans la vue avec des informations de couleur variables. Plus tard dans l’animation, j’ai juste lancé " setNeedsDisplay " plusieurs fois avec une minuterie et cette routine se répète, les couches sont redessinées en utilisant des paramètres mis à jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top