2017-04-01 22 views
2

UIColorの作成に使用したいデータベースからユーザーID( "" XzSYoKJaqKYREkdB2dgwt0fLOPP2 ""のような形式)を生成しました。Swift:文字列を16進数のカラーコードに変換する

色の16進コードでUIColorを作成する方法については、solutionsがいくつか見つかりましたが、上記のような文字列からカラー16進コード(#ffffff)を生成する方法はよく分かりません。どんな助けでも感謝します、ありがとう。

+0

すべてのユーザーIDはお互いに非常に異なっていますか? – kennytm

+0

生成されたユーザーID文字列ごとにランダムな色を使用したいですか? – Danyl

+0

すべてのIDは上記のような形式です(firebase user.uid)。私はこれらの文字列から独自の色(可能な場合)を作成したいと思います。 –

答えて

10

可能なすべてのユーザーIDに固有の色を取得するには、あまりにも多くのユーザーIDがあります。あなたの最善の選択肢は、利用可能な色の1つに各ユーザーidを絞り込み、2人のユーザーが同じ色を持つ可能性があるという事実を受け入れる方法を見つけることです。

可能な解決策の1つは、ユーザーID文字列のhashValueを取得し、そのIntを可能な16,777,216色の1つに減らすことです。 0xFFFFFF

あなたは今colorNumから色を作成することができます - この時点colorNum

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

は範囲0あります。

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は、アプリケーションが実行されるたびに同じであることが保証されていないため、ユーザーのプロファイルにこの色を保存したいと思うでしょう。

+3

@vacawamaもちろん、ありがとう。一定。 – rmaddy

0

私の理解では、すべてのユーザーに毎回ランダムな色を生成し、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) 
} 

オスカーデモヤの上記の解決策がhttps://classictutorials.com/2014/08/generate-a-random-color-in-swift/から役立つことを願っています。

+1

OPは明確で一定の色を生成したいので、arc4randomではなくuuidで生成されなければなりません。 – ocanal

+0

ありがとう、これは私がuserIdからUIColorを生成できない場合に使用するソリューションになります。 UIColorを作成するにはどうにかuserIdを使用することができますが、実際は最適です。 –

関連する問題