2016-06-02 23 views
0

Ich habe CAGradientLayer getestet, um Farbverläufe für iOS und Mac OS X (Cocoa) zu erstellen. Zum Beispiel habe ich die folgenden Codezeilen, um Farbverlaufsfarben für iOS zu erstellen.Ein Array von CGColors aus einem Array von UIColors oder NSColors erstellen

let gradient: CAGradientLayer = CAGradientLayer() 
gradient.frame = view.bounds 
gradient.colors = [UIColor.orangeColor().CGColor,UIColor.redColor().CGColor] 
gradient.locations = [0.1,0.9] 
self.view.layer.insertSublayer(gradient,atIndex:0) 

Nun, was ich habe, ist eine Reihe von Farben (UIColor oder NSColor), abhängig von der Entwicklungsplattform. Wenn ich ein Array mit UIColor (oder NSColor) erstellen programmatisch Objekte, beginnend mit

var cArray = [UIColor]() 

oder

var cArray = [NSColor]() 

, wie kann ich ein Array mit CGColors mit ihnen zu schaffen? Ich denke, dass this topic verwandt sein könnte. Ein Problem besteht darin, dass ich ein Array von CGColor-Objekten nicht deklarieren und initialisieren kann.

Danke

+0

Sie http verwenden: // Stackoverflow com/questions/24065017/how-to-device-type-from-swift-os-x-or-ios zu wissen, auf welcher Plattform Sie sind, und möglicherweise ein Objekt, das behandelt werden würde die richtige Farbe: 'MyCustomObjectColor.redColor(). CGColor' – Larme

+1

Was ist mit einer einfachen Karte:' let cgcolors = uicolors.map {$ 0.CGColor} '? - Denken Sie auch daran, 'SKColor' als plattformunabhängigen Alias ​​für' UIColor' oder 'NSColor' zu verwenden. –

Antwort

2

Sie tun können:

es
extension _ArrayType where Generator.Element == UIColor { 
    func CGColors() -> [CGColorRef] { 
     var cgColorArray: [CGColorRef] = [] 

     for color in self { 
      cgColorArray.append(color.CGColor) 
     } 

     return cgColorArray 
    } 
} 

Verwenden Sie wie folgt:

let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()] 
colors.CGColors() 

Wiederholen für NSColor.

+0

Danke. Aber wie willst du ein Array von CGColor-Objekten deklarieren und initialisieren? –

+0

'var cgColorArray: [CGColorRef] = []' – Andrew

+0

Hoppla, tut mir leid ... Richtig ... Ich bekomme einen Fehler bei Rückgabe cgColorArray, obwohl. –

4

Ich möchte auch die Funktion map etwas Aufmerksamkeit geben.

let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()] 
    let cgColors: [CGColor] = colors.map({ $0.CGColor }) 

map wendet den Verschluß zu jedem Element in dem Feld und gibt es zurück.

$0 ist der erste (und einzige) Parameter für den Abschluss.

Es ist eigentlich eine Abkürzung für:

let cgColors: [CGColor] = colors.map({ return $0.CGColor }) 

das ist eine Abkürzung für:

let cgColors: [CGColor] = colors.map({ 
     color: in 
     return color.CGColor 
    }) 

, die eine Abkürzung für:

let cgColors: [CGColor] = colors.map({ 
     (color: UIColor) in 
     return color.CGColor 
    }) 
+0

Okay. Danke, dass du mir etwas Neues gezeigt hast. Aber ich sehe noch nicht, wie es mit der Erstellung eines Arrays von CGColor-Objekten zusammenhängt. –

+2

Wie ist es * nicht * verwandt? Es ist die eigentliche Erstellung eines Arrays von CGColor. Ohne die Notwendigkeit einer Erweiterung. – netigger

+0

Welche Zeile zeigt ein Array von CGColor-Objekten, bitte? Farben.map ({$ 0.CGColor})? –