Как выбрать случайный цвет в Swift - PullRequest
0 голосов
/ 25 октября 2018

У меня есть небольшой кусочек кода, в котором он выбирает несколько цветов, я хотел бы знать, что если бы я хотел выбрать случайный цвет между этими под кодом, как я мог бы это сделать?

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 голосов
/ 25 октября 2018

Если вы хотите использовать только те цвета, которые вы добавили в вопросе, добавьте нужную шестнадцатеричную строку цвета в 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)
    )
}
0 голосов
/ 25 октября 2018

Чтобы получить случайный цвет из списка 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 экземпляр.

Сообщите мне в случае каких-либо проблем.

0 голосов
/ 25 октября 2018

Попробуй это.Это должно работать.

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

   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...