2017-02-01 4 views
0

Ich versuche, die Szene Hintergrundfarbe in eine zufällige Farbe beim Start mit dem unten genannten Code.Swift - Einstellung zufällige UIColor funktioniert nicht

func randomColor() -> UIColor{ 
    //Generate between 0 to 1 
    let red:CGFloat = CGFloat(drand48()) 
    let green:CGFloat = CGFloat(drand48()) 
    let blue:CGFloat = CGFloat(drand48()) 
    return UIColor(red:red, green: green, blue: blue, alpha: 1.0) 
} 

override func didMove(to view: SKView) { 
    self.backgroundColor = randomColor() 
    } 

ich den Code an anderer Stelle in meinem Programm und seine Arbeits bin mit aber wie erwartet, wenn ich versuche, und stellen Sie die Szene Hintergrundfarbe mit der gleichen Funktion lädt er immer die gleiche grüne Farbe. Irgendeine Idee ist warum?

+0

Verwenden Sie stattdessen 'arc4random_uniform()'. Es hat einen zufälligen Startwert und funktioniert wie erwartet. – Desdenova

+0

Hier: http://stackoverflow.com/questions/25050309/swift-random-float-between-0-and-1 – Desdenova

+0

@Mick Bro können Sie Code mit 'var rot ersetzen: CGFloat = arc4random()% 255/255.0 // Oder (empfohlen): var red: CGFloat = arc4random_uniform (255)/255.0' und lassen Sie mich wissen, wenn Arbeit. –

Antwort

0

Verwenden Sie die folgenden Funktionen:

func random() -> CGFloat { 
    return CGFloat(arc4random())/CGFloat(UInt32.max) 
} 

func colorOfView() -> UIColor { 
    return UIColor(red: self.random(), 
        green: self.random(), 
        blue: self.random(), 
        alpha: 1.0) 
} 

In Kommentar Mukesh ist richtig.

Grund:

Viele Computer-Farbpaletten und Mac Ausgabegeräten erwarten RGB-Farbkomponenten darstellbare in 8-Bit-Werte sein, die, wenn sie als ganze Zahlen ausgedrückt, bis 255 im Bereich von 0 sind

1

Der "Standard" Weg, um eine Zufallszahl zu erzeugen, ist arc4random_uniform, nicht drand48 und ich habe nicht wo Sie so etwas gefunden.

Anstatt einen zufälligen Wert für jede Komponente zu generieren, warum nicht einfach eine einzige Int (zwischen 0x0 und 0xffffff) generieren und diese in eine Farbe konvertieren?

Zuerst erzeugen wir die Zahl:

let randomNumber = Int32(arc4random_uniform(16777216)) 

Als nächstes schreiben wir eine Erweiterung für UIColor, die diese Nummer zu einem wandelt UIColor:

extension UIColor { 
    public static func convertToColor(number: Int32) -> UIColor { 
     return UIColor.init(red: CGFloat((hex>>16)&0xFF)/255.0, green: CGFloat((hex>>8)&0xFF)/255.0, blue: CGFloat(hex&0xFF)/255.0, alpha: 1.0) 
    } 
} 

Dann können wir diese Methode aufrufen:

let randomColor = UIColor.convertToColor(number: randomNumber) 
Verwandte Themen