Frage

Wie kann ich diese beiden in der gleichen UIView verwenden korrekt?

Ich habe eine benutzerdefinierte Unterklasse CALayer, in dem ich ein Muster innerhalb drawInContext ziehen

Ich habe eine andere, in der ich ein Overlay-PNG-Bild als Inhalt eingestellt.

Ich habe eine dritte, die nur ein Hintergrund ist.

Wie überlagern ich alle drei dieser Maschinen?

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

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

Die anderen 2 für sich korrekt ziehen, wenn ich sie in dieser Reihenfolge tun. Egal, wo ich versuche, und setzen BOTTOM, es verhindert, dass immer squaresLayer von Zeichnung. Der Grund, warum ich drei Schichten brauchen Ich beabsichtige, die Farben in den Hintergrund und benutzerdefinierte Schichten zu animieren. Die oberste Schicht ist eine grafische Overlay.

War es hilfreich?

Lösung

Es könnte aber auch den Code in den Fall, fügen Sie ihn jemand versucht, gestapelt CALayers zu animieren, die ihre eigenen internen Auslosung Routinen

- (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 ist, wo ich bin Breite Speicherung, Höhe und Bildinformationen, es ist der Controller für diese UIView.

TopLayer und BOTTOM ist eine benutzerdefinierte UIView-Unterklasse, die mit variablen Informationen Farbe einiger Formen in der Ansicht ziehen. Später in meiner Animation Ich betreiben „setNeedsDisplay“ nur immer wieder mit einem Timer und dieser Routine wiederholt, um die Schichten wieder Unentschieden aktualisierten Parameter angeben kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top