2013-06-22 10 views
8

ich ein UIViewController muss zurück, wo ich einen Hintergrund Gradienten mitCAGradientLayer senden

CAGradientLayer *gradient = [CAGradientLayer layer]; 
    ... 
    gradient.frame = frame; 
    self.backGradient = gradient; 
    [self.view.layer insertSublayer:gradient atIndex:0]; 

es funktioniert gut schaffen, später muss ich die subview _selectionFrame meiner Ansicht-Controller senden nach hinten:
(Ich brauche oft die _selectionFrame senden vorne nach hinten und zu, für die Animation und Zeichen Zweck)

self ist der Viewcontroller:

[self.view sendSubviewToBack:_selectionFrame]; 

Allerdings sendet dies die _selectionFrame hinter der gradient. Ich möchte es nur über dem Gradienten, aber unter jeder anderen Unteransicht. Das Problem ist, dass der Gradient keine Ansicht ist, also kann ich die Funktionen für den Gradienten nicht verwenden.
Ich möchte [self.view sendSubviewToBack:gradient]; anrufen

Aber das funktioniert nicht.

Antwort

13

Erstellen Sie eine Ansicht, die nur den Farbverlauf enthält

+0

Funktioniert und ist einfach. – AlexWien

3

Die einfachste Lösung besteht nicht darin, die Gradientenschicht als Unterschicht voneinzufügen. Stattdessen sollte es self.view.layer sein. Eine UIView-Unterklasse verfügt über eine Klassenmethode layerClass, mit der Sie angeben können, welche Klasse der Layer sein soll.

Oder es könnte die Schicht eines anderen subview von self.view werden, wiederum leicht unter Verwendung der gleichen Klassenmethode layerClass angeordnet.

Andernfalls müssen Sie Layer-Befehle verwenden, keine Befehle anzeigen, um die Sublayer von self.view zu bestellen. Das schließt seine Unteransichten ein. Mit anderen Worten, wenn v eine Unteransicht von self.view ist, dann ist v.layer eine Unterschicht von self.view.layer, und Sie können es unter seinen Sublayern bestellen, indem Sie das Sublayer-Array neu anordnen.

+0

self.view.layer = self.backGradient; funktioniert nicht self.view.layer ist nur lesbar – AlexWien

+0

Sie haben nicht gelesen, was ich gesagt habe. Sie müssen eine benutzerdefinierte UIView verwenden und 'layerClass' implementieren, damit die UIView mit einer CAGradientLayer als Layer" geboren "wird. – matt

+0

Danke interessant, aber komplexer als nötig (für mich) – AlexWien