我希望通過調用預定的字符串數組(例如(紅色,綠色,粉紅色))中的隨機顏色來改變我的swift應用程序的背景顏色。從字符串數組中隨機排列的顏色
所以我有那個數組,我想要隨機選擇背景顏色作爲thoses顏色之一。
使用self.bg.background顏色導致在Xcode中說,一個字符串不能轉換成的UIColor
我希望通過調用預定的字符串數組(例如(紅色,綠色,粉紅色))中的隨機顏色來改變我的swift應用程序的背景顏色。從字符串數組中隨機排列的顏色
所以我有那個數組,我想要隨機選擇背景顏色作爲thoses顏色之一。
使用self.bg.background顏色導致在Xcode中說,一個字符串不能轉換成的UIColor
下面是做到這一點的一種方式的示例:
import UIKit
extension Array {
func randomElement() -> Element {
return self[Int(arc4random_uniform(UInt32(self.count)))]
}
}
extension UIColor {
enum ColorEnum: String {
case red // = "red"
case green // = "green"
case blue // = "blue"
case pink // = "pink"
func toColor() -> UIColor {
switch self {
case .red:
return .redColor()
case .green:
return .greenColor()
case .blue:
return .blueColor()
case .pink:
return UIColor(hue: 1.0, saturation: 0.25, brightness: 1.0, alpha: 1.0)
}
}
}
static func fromString(name: String) -> UIColor? {
return ColorEnum(rawValue: name)?.toColor()
}
}
let colors = ["red", "green", "pink"] // stored as String
UIColor.fromString(colors.randomElement())
let enumColors: [UIColor.ColorEnum] = [.red, .green, .pink] // stored as enum
enumColors.randomElement().toColor()
@LeoDabus對啊,忘了那個捷徑!我會編輯它。 – ColGraff
輝煌的謝謝:) –
只是想知道什麼應該被稱爲uicolor一旦這已成立?我使用self.view.backgroundcolor = enumColors,但這沒有奏效。對不起,如果它是一個簡單的問題,我對編碼很陌生。 –
你不能直接將任何字符串像「綠色」「粉紅色」轉換爲UIColor對象。如果你只想使用這個,那麼你必須創建自定義的枚舉,將這些字符串匹配到那裏等價的UIColor對象。
這意味着您可以在由我寫的UIColor擴展支持的下列表單中使用字符串顏色。
0.5 0.6 0.7 1.0
」 的綠色70%紅60%50%被分離,藍,α100%)#ffffff
(白顏色的當量)等於UIColor.white要轉換這兩種顏色字符串的UIColor可以使用的UIColor的以下擴展
extension UIColor {
//Convert RGBA String to UIColor object
//"rgbaString" must be separated by space "0.5 0.6 0.7 1.0" 50% of Red 60% of Green 70% of Blue Alpha 100%
public convenience init?(rgbaString : String){
self.init(ciColor: CIColor(string: rgbaString))
}
//Convert UIColor to RGBA String
func toRGBAString()-> String {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
self.getRed(&r, green: &g, blue: &b, alpha: &a)
return "\(r) \(g) \(b) \(a)"
}
//return UIColor from Hexadecimal Color string
public convenience init?(hexString: String) {
let r, g, b, a: CGFloat
if hexString.hasPrefix("#") {
let start = hexString.index(hexString.startIndex, offsetBy: 1)
let hexColor = hexString.substring(from: start)
if hexColor.characters.count == 8 {
let scanner = Scanner(string: hexColor)
var hexNumber: UInt64 = 0
if scanner.scanHexInt64(&hexNumber) {
r = CGFloat((hexNumber & 0xff000000) >> 24)/255
g = CGFloat((hexNumber & 0x00ff0000) >> 16)/255
b = CGFloat((hexNumber & 0x0000ff00) >> 8)/255
a = CGFloat(hexNumber & 0x000000ff)/255
self.init(red: r, green: g, blue: b, alpha: a)
return
}
}
}
return nil
}
// Convert UIColor to Hexadecimal String
func toHexString() -> String {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
self.getRed(&r, green: &g, blue: &b, alpha: &a)
return String(
format: "%02X%02X%02X",
Int(r * 0xff),
Int(g * 0xff),
Int(b * 0xff)
)
}
}
取得任何隨機您可以在Array上創建一個擴展,如下所示。
extension Array {
func randomElement() -> Element {
return self[Int(arc4random_uniform(UInt32(self.count)))]
}
}
對於你的情況,你可以按照如下
//Define array to hold UIColor which will hold your Views background color
var arrOfColors = [UIColor]()
//Create array of RGBA String color like
let arrRGBAStringColor = ["0.5 0.6 0.7 1.0","0.53 0.46 0.27 1.0","0.3 0.16 0.17 1.0"]
//Create array of Hexadecimal String color like
let arrHexStringColor = ["#cccc41","#8e8e8e","#003300"]
for stringColor in arrRGBAStringColor {
//Use UIColor extension to convert RGBA string to UIColor
if let color = UIColor(rgbaString : stringColor){
arrOfColors.append(color)
}
}
for stringColor in arrHexStringColor {
//Use UIColor extension to convert Hexadecimal string to UIColor
if let color = UIColor(hexString : stringColor){
arrOfColors.append(color)
}
}
//Now fetch any random color from your color array
let randomColor = arrOfColors.randomElement()
self.backgroundColor = randomColor
爲什麼不能有'UIColor'陣列創建的UIColor的陣列? – rmaddy
'bg.backgroundColor = UIColor(hue:CGFloat(arc4random_uniform(361))/ 360,飽和度:1,亮度:1,alpha:1)' –