2015-12-21 17 views
7

Ich habe CAGradientLayer mit drei Farben erstellt, ich muss jeder Farbe verschiedene Standorte geben. Beispiel:So geben Sie "Standorte" an CAGradientLayer

Red = 0 to 50 % 
Yellow = 51 to 80 % 
Green = 81 to 100 % 

Ich habe versucht, mit startPoint und endPoint geben, aber es hat nicht funktioniert. enter image description here

+0

wo genau kämpfen Sie? Die Ebene hat zwei Eigenschaften "Farben" und "Orte", die für Sie nützlich sein sollten. Welche Sprache übrigens? – luk2302

+0

Ihr "Beispiel" ist nicht klar, erklären Sie was genau 0% -50%, 51% -80% und 81% -100% meinen und fügen Sie den Code hinzu, den Sie verwendet haben, damit jemand Ihnen das Problem zeigen kann, sonst können wir alles tun ist es, die Dokumentation zu zitieren. –

+0

Die Farbe auf der Farbverlaufsschicht sollte so und so sein. Standardmäßig werden alle drei Farben gleichmäßig verteilt, was ich ändern möchte. Ich benutze Objective-C. Danke. –

Antwort

16

Wenn Sie den folgenden Code in einen Spielplatz werden Sie die genaue gewünschte Ausgabe erhalten:

let view = UIView(frame: CGRectMake(0,0,200,100)) 

let layer = CAGradientLayer() 
layer.frame = view.frame 
layer.colors = [UIColor.greenColor().CGColor, UIColor.yellowColor().CGColor, UIColor.redColor().CGColor] 
layer.locations = [0.0, 0.8, 1.0] 

view.layer.addSublayer(layer) 

XCPShowView("ident", view: view) 

ausgeben:

enter image description here

Sie definieren einfach die Farben als ein Array von CGColors und ein Array der gleichen Größe von NSNumber s jeweils zwischen 0,0 und 1,0.

Dont verwenden startPoint und endPoint dafür - sie sind für die Definition von wo nach wo der Gradient in der Schicht gezeigt wird - es ist nicht etwas mit den Prozenten zu tun haben und die Farben usw.


Neuere Swift3 Version des Codes:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 100)) 
let layer = CAGradientLayer() 
layer.frame = view.frame 
layer.colors = [UIColor.green.cgColor, UIColor.yellow.cgColor, UIColor.red.cgColor] 
layer.locations = [0.0, 0.8, 1.0] 
view.layer.addSublayer(layer) 
PlaygroundPage.current.liveView = view 
+0

Danke, es hat mein Problem gelöst. –

+1

@luk Was ist, wenn ich einen horizontalen Gradienten mit Standorten Array möchte? – abhi1992

+1

Danke für die Wiederholung @ luk2302, Wir können Startpunkt, Endpunkt und Standorte zusammen verwenden, um einen horizontalen Gradienten zu erstellen. – abhi1992