Swift - 设置随机UIColor不起作用

时间:2017-02-01 07:25:02

标签: ios swift 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()
    }

我在程序中的其他地方使用了代码并且按预期工作但是当我尝试使用相同的功能设置场景背景颜色时,它总是加载相同的绿色。任何想法都是为什么?

2 个答案:

答案 0 :(得分:1)

"标准"生成随机数的方法是arc4random_uniform,而不是drand48,我不知道你在哪里找到这样的东西。

为什么不生成单个Int(在0x0和0xffffff之间)并将其转换为颜色,而不是为每个组件生成随机值?

首先,我们生成数字:

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)

答案 1 :(得分:1)

使用以下功能:

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

评论 Mukesh 是对的。

<强>原因:

许多计算机调色板和Mac输出设备都希望RGB颜色分量能够以8位值表示,当表示为整数时,它们的范围为0到255.