簡體   English   中英

如何在Swift中選擇隨機顏色

[英]How to select a random color in Swift

我有一些代碼可以在其中選擇一些顏色,我想知道如果我想在代碼下的這些顏色之間選擇一種隨機顏色怎么辦?

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

我想在擴展程序中選擇的顏色

在此處輸入圖片說明

嘗試這個。 它應該工作。

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

   }

如果只想使用在問題中添加的顏色,則在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)
    )
}

要從UIColors列表中獲得隨機顏色,只需在UIColor元素的collection上調用randomElement() ,即

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

您可以像這樣使用它:

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

我在這里使用了示例顏色。 使用您要使用的特定顏色。

如果您使用十六進制值形式的顏色,則需要在擴展中添加另一個方法以將該hex值轉換為UIColor實例。

如有任何問題,請通知我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM