2017-04-01 1 views
2

Ich habe Benutzer-IDs (mit einem Format wie "" XzSYoKJaqKYREkdB2dgwt0fLOPP2 "") aus einer Datenbank generiert, die ich verwenden möchte, um eine UIColor zu erstellen.Swift: Zeichenfolge in Hexadezimalcode konvertieren

Ich habe mehrere solutions gefunden, wie man einen UIColor mit einem farbigen Hex-Code karriere, aber ich weiß nicht genau, wie ich einen Farb-Hex-Code (#ffffff) aus einer Zeichenkette wie der obigen generieren würde. Jede Hilfe wäre dankbar, danke.

+0

Sind alle Benutzer-IDs sehr unterschiedlich? – kennytm

+0

Sie möchten eine zufällige Farbe für jeden generierten Benutzer Ids string? – Danyl

+0

Alle IDs haben das Format wie oben (firebase user.uid). Ich würde gerne eine einzigartige Farbe (wenn möglich) aus diesen Saiten erstellen. –

Antwort

10

Es gibt viel zu viele Benutzer-IDs, um eine eindeutige Farbe für jede mögliche Benutzer-ID zu erhalten. Ihre beste Option wäre es, eine Möglichkeit zu finden, jede Benutzer-ID auf eine der möglichen verfügbaren Farben einzugrenzen und die Tatsache zu akzeptieren, dass zwei Benutzer die gleiche Farbe haben.

Eine mögliche Lösung wäre, die hashValue der Benutzer-ID-Zeichenfolge zu erhalten und dann Int auf eine der möglichen 16.777.216 Farben zu reduzieren.

let userId = "XzSYoKJaqKYREkdB2dgwt0fLOPP2" // or whatever the id is 
let hash = abs(userId.hashValue) 
let colorNum = hash % (256*256*256) 

An diesem Punkt colorNum ist der Bereich 0-0xFFFFFF

Sie können nun eine Farbe aus colorNum erstellen.

let red = colorNum >> 16 
let green = (colorNum & 0x00FF00) >> 8 
let blue = (colorNum & 0x0000FF) 
let userColor = UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0) 

Sie diese Farbe in dem Profil des Benutzers gespeichert werden sollen, da die hashValue nicht gleich jedes Mal läuft die App sein garantiert.

+3

@vacawama Natürlich, danke. Fest. – rmaddy

0

Nach meinem Verständnis, Sie versuchen, jedes Mal eine zufällige Farbe für jeden Benutzer zu generieren und speichern Sie es in der Firebase? Korrigiere mich, wenn ich falsch liege.

Ich hoffe, dass diese Lösung Ihr Problem der Erstellung zufälliger Farben jedes Mal beheben würde. Kurz gesagt, wo und wann Sie eine zufällige eindeutige Farbe benötigen - rufen Sie die Methode auf und prüfen Sie, ob die zurückgegebene UIColor bereits in der Datenbank vorhanden ist. Wenn es nicht existiert, dann benutze es!

func getRandomColor() -> UIColor { 
let randomRed:CGFloat = CGFloat(arc4random())/CGFloat(UInt32.max) 
let randomGreen:CGFloat = CGFloat(arc4random())/CGFloat(UInt32.max) 
let randomBlue:CGFloat = CGFloat(arc4random())/CGFloat(UInt32.max) 
return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0) 
} 

Ich hoffe, dass die oben genannte Lösung von Oscar De Moya aus https://classictutorials.com/2014/08/generate-a-random-color-in-swift/ Sie helfen würde.

+1

OP möchte eine eindeutige und konstante Farbe erzeugen, daher muss sie auf Basis von UUID nicht mit arc4random generiert werden. – ocanal

+0

Danke, das wäre die Lösung, die ich verwenden würde, wenn ich keinen UIColor von der userId generieren kann. Es wäre wirklich optimal, wenn ich die userId irgendwie zum Erstellen des UIColor verwenden könnte. –

Verwandte Themen