2017-02-01 8 views
0

私は、以下のコードを使用して、起動時にシーンの背景色をランダムな色に設定しようとしています。私が試してみて、同じ機能を持つシーンの背景色を設定すると、期待どおり、私は私のプログラムとその作業の他の場所でコードを使用していスウィフト - ランダムなUIColorが動作しない設定

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() 
    } 

は、しかし、それは常に同じ緑色をロードします。どんな考えがあるの?

+0

代わりに 'arc4random_uniform()'を使用してください。それは 'ランダムな種を必要とし、期待どおりに動作します。 – Desdenova

+0

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

+0

@Mick broは、コードを 'var red:CGFloat = arc4random()%255/255.0 //(推奨): var red:CGFloat = arc4random_uniform(255)/ 255.0'&もし私が仕事をしていれば教えてください。 –

答えて

0

以下の機能を使用してください。

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) 
} 

コメントムケシュが正しいです。

理由:

多くのコンピュータのカラーパレットおよびMac出力装置はRGB色成分が整数として表される8ビット値で表現することを期待し、0

〜255の範囲であります
1

乱数を生成するための「標準的な」方法は、drand48ではなく、arc4random_uniformであり、私はそのようなことをどこで見つけられませんでしたか?

各コンポーネントにランダムな値を生成する代わりに、Int(0x0と0xffffffの間)を1つ生成し、それを色に変換するだけの理由はありますか?

まず、我々は数生成:

let randomNumber = Int32(arc4random_uniform(16777216)) 

次に、我々はUIColorにこの番号を変換し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) 
    } 
} 

その後、我々は、このメソッドを呼び出すことができます。

let randomColor = UIColor.convertToColor(number: randomNumber) 
関連する問題