如何在Swift中选择随机颜色

时间:2018-10-25 11:24:37

标签: ios xcode colors

我有一些代码可以选择一些颜色,我想知道如果我想在代码下选择这些颜色之间的随机颜色怎么办?

extension UIColor {
    static var random: UIColor {
        return UIColor(red: .random(in: 0...2), green: .random(in: 0...2), blue: .random(in: 0...2), alpha: 1.0)
    }
}

我想在扩展程序中选择的颜色

enter image description here

3 个答案:

答案 0 :(得分:1)

尝试一下。应该可以。

 extension UIColor {

     static func random() -> UIColor {
        return UIColor.rgb(CGFloat.random(in: 0..<256), green: CGFloat.random(in: 0..<256), blue: CGFloat.random(in: 0..<256))
     }

     static func rgb(_ red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
      return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1)
     }

     convenience init(red: Int, green: Int, blue: Int) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
     }

     convenience init(rgb: Int) {
        self.init(
          red: (rgb >> 16) & 0xFF,
          green: (rgb >> 8) & 0xFF,
          blue: rgb & 0xFF
       )
      }

    static func getColor() -> UIColor {
       let chooseFrom = [0x064545,0x708545,0x45580] //Add your colors here
       return UIColor.init(rgb: chooseFrom[Int.random(in: 0..<chooseFrom.count)])
     }

   }

答案 1 :(得分:1)

如果您只想使用在问题中添加的颜色,请在Array中添加所需的颜色十六进制字符串。

let arrColors = ["ff0000", "228B22", "FFFF00", "800080", "ffa500"] // Use your color hex

现在您需要像这样从上面的数组中选择随机对象。

let randomIndex = Int(arc4random_uniform(UInt32(arrColors.count)))
self.vwNavigationBar.backgroundColor = self.hexStringToUIColor(hex: arrColors[randomIndex])

将十六进制字符串转换为颜色的功能

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.count) != 6) {
        return UIColor.gray
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

答案 2 :(得分:0)

要从UIColors的列表中获得随机颜色,只需在randomElement()个元素的collection上调用 UIColor ,即

extension UIColor {
    static func random(from colors: [UIColor]) -> UIColor? {
        return colors.randomElement()
    }
}

您可以像这样使用它:

let randomColor = UIColor.random(from: [.red, .yellow, .green, .blue, .purple])

我在这里使用了示例颜色。使用您要使用的特定颜色。

如果您使用 hex 值形式的颜色,则需要在扩展名中添加另一种方法,以将该hex值转换为UIColor实例。

如有任何问题,请通知我。