【问题标题】:Swift - setting random UIColor not working [duplicate]Swift - 设置随机 UIColor 不起作用[重复]
【发布时间】:2017-06-17 20:47:51
【问题描述】:

我正在尝试使用以下代码在启动时将场景背景颜色设置为随机颜色。

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

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

【问题讨论】:

  • 请改用arc4random_uniform()。它不需要随机种子,并且会按您的预期工作。
  • @Mick bro 你能用var red: CGFloat = arc4random() % 255 / 255.0 // Or (recommended): var red: CGFloat = arc4random_uniform(255) / 255.0 替换代码吗?如果可以,请告诉我。
  • 谢谢,这似乎奏效了。
  • 值应该在0.01.0之间。

标签: ios swift uicolor


【解决方案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)

【讨论】:

    【解决方案2】:

    使用以下函数:

     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。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2011-07-28
      • 2012-12-16
      • 2011-09-04
      • 2018-02-05
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      相关资源
      最近更新 更多