我從用於創建UIColor的數據庫生成用戶ID(格式類似「」XzSYoKJaqKYREkdB2dgwt0fLOPP2「」))。Swift:將字符串轉換爲十六進制顏色代碼
我發現了幾個solutions關於如何創建一個顏色十六進制代碼的UIColor,但我不知道如何從上面的字符串生成一個顏色十六進制代碼(#ffffff)。任何幫助將不勝感激,謝謝。
我從用於創建UIColor的數據庫生成用戶ID(格式類似「」XzSYoKJaqKYREkdB2dgwt0fLOPP2「」))。Swift:將字符串轉換爲十六進制顏色代碼
我發現了幾個solutions關於如何創建一個顏色十六進制代碼的UIColor,但我不知道如何從上面的字符串生成一個顏色十六進制代碼(#ffffff)。任何幫助將不勝感激,謝謝。
有太多的用戶標識符爲每個可能的用戶標識獲取唯一的顏色。您最好的選擇是找到一種方法,將每個用戶標識縮小爲可能的顏色之一,並接受兩個用戶可能具有相同顏色的事實。
一個可能的解決方案是獲取用戶ID字符串的hashValue
,然後將該Int
降至可能的16,777,216種顏色之一。
let userId = "XzSYoKJaqKYREkdB2dgwt0fLOPP2" // or whatever the id is
let hash = abs(userId.hashValue)
let colorNum = hash % (256*256*256)
此時colorNum
是範圍0
- 0xFFFFFF
您現在可以從colorNum
創建顏色。
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)
你將要這種顏色存儲在用戶的個人資料,因爲hashValue
不能保證每次都相同的應用程序運行。
@vacawama當然,謝謝。固定。 – rmaddy
就我的理解而言,您試圖每次爲每個用戶生成隨機顏色並將其存儲在Firebase中?如我錯了請糾正我。
我希望這個解決方案能夠解決您每次創建隨機顏色的問題。總之,無論何時何地需要隨機唯一的顏色 - 調用該方法並檢查返回的UIColor是否已存在於數據庫中。如果它不存在然後使用它!
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)
}
我希望從Oscar De Moya的https://classictutorials.com/2014/08/generate-a-random-color-in-swift/的上述解決方案將幫助你。
OP想要生成一個獨特且恆定的顏色,所以它必須基於uuid而不是arc4random生成。 – ocanal
謝謝,如果我無法從userId生成UIColor,這將是我將使用的解決方案。這將是最佳的,但如果我可以使用userId以某種方式創建UIColor。 –
所有用戶ID是否彼此有很大不同? – kennytm
你想爲每個生成的用戶ID字符串隨機顏色? – Danyl
所有的ID都具有上面的格式(firebase user.uid)。我想從這些字符串中創建一個獨特的顏色(如果可能的話)。 –