我已经从数据库生成了用户ID(格式类似于“XzSYoKJaqKYREkdB2dgwt0fLOPP2”),想要使用它来创建UIColor。
我发现有几个解决方案可以使用颜色十六进制代码创建UIColor,但是我不知道如何从上述字符串生成颜色十六进制代码(#ffffff)。任何帮助将不胜感激,谢谢。
我发现有几个解决方案可以使用颜色十六进制代码创建UIColor,但是我不知道如何从上述字符串生成颜色十六进制代码(#ffffff)。任何帮助将不胜感激,谢谢。
由于用户id太多了,不可能为每个可能的用户id获取唯一的颜色。您最好的选择是找到一种方法将每个用户id缩小到可能可用的颜色之一,并接受两个用户可能具有相同颜色的事实。
一个可能的解决方案是获取用户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
不能保证在每次应用运行时都相同,因此您需要将此颜色存储在用户的个人资料中。
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/ 上提供的解决方案能够帮到您。