【问题标题】:Randomize color in XCode在 XCode 中随机化颜色
【发布时间】:2015-07-26 04:04:47
【问题描述】:

我正在尝试使用我已经创建的一些颜色随机化 XCode 中标签的文本颜色,我尝试了不同的方法,这是我得到的最接近的方法。

    override func viewDidLoad() {
    super.viewDidLoad()

    let color1 = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
    let color2 = UIColor(red: 80/255, green: 1, blue: 200/255, alpha: 1)
    let color3 = UIColor(red: 150/255, green: 80/255, blue: 1, alpha: 1)
    let color4 = UIColor(red: 1, green: 80/255, blue: 80/255, alpha: 1)
    let color5 = UIColor(red: 80/255, green: 1, blue: 80/255, alpha: 1)

    var randomEight = arc4random_uniform(5)+1
    var randomColor:String = String(format:"color%i", randomEight)

    randomLabel.textColor = randomColor
}

但是,randomColor 变量是一个字符串,我无法将其转换为 UIColor。

【问题讨论】:

  • 请注意,80/2550,而不是您所期望的。
  • 不,它实际上对我有用,我单独测试了一些颜色

标签: ios xcode swift colors uicolor


【解决方案1】:

将所有颜色放入一个数组中,然后使用randomEight 作为数组中的索引来获得正确的颜色。此外,您可能需要检查整数除法以确保获得正确的颜色。

let color1 = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
let color2 = UIColor(red: 80/255, green: 1, blue: 200/255, alpha: 1)
let color3 = UIColor(red: 150/255, green: 80/255, blue: 1, alpha: 1)
let color4 = UIColor(red: 1, green: 80/255, blue: 80/255, alpha: 1)
let color5 = UIColor(red: 80/255, green: 1, blue: 80/255, alpha: 1)

let colors = [color1, color2, color3, color4, color5]
let randomEight = Int(arc4random_uniform(UInt32(colors.count)))

randomLabel.textColor = colors[randomEight]

【讨论】:

  • 谢谢 Aderis,这对我有用!只有一件事,“arc4random..”需要转换为 Int 才能工作。 Int(arc4random_uniform(5))
  • @Gabe12 不要硬编码幻数5,请使代码更健壮并改用colors.count。它需要转换为UInt32 才能与arc4random_uniform 一起使用(从我的回答中复制粘贴)。
【解决方案2】:

将颜色放入一个数组中,然后选择一个随机索引,例如:

let colors: [UIColor] = [ UIColor.redColor(),
                          UIColor.blueColor(),
                          UIColor.greenColor()
                        ] // ^- replace with your own colors

let randomColor = colors[Int(arc4random_uniform(UInt32(colors.count)))]

注意使用arc4random_uniform 的必要强制转换。另请注意,索引从0 开始,因此不要将1 添加到随机数中。

不需要randomEight(为什么它是“八”?),如果单一文本颜色是您使用颜色的唯一位置,您甚至可以省略randomColor并直接分配到randomLabel.textColor

【讨论】:

    【解决方案3】:
    let randomEight = arc4random_uniform(5)+1
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
     if randomEight == 1 {
        randomLabel.textColor = UIColor.cyanColor()
        }
        else if randomEight == 2 {
    
            randomLabel.textColor = UIColor.purpleColor()
        }
    
        else if randomEight == 3{
            randomLabel.textColor = UIColor.orangeColor()
    
        } else if randomEight == 4 {
    
            randomLabel.textColor = UIColor.blueColor()
        }
        else {
    
            randomLabel.textColor = UIColor.greenColor()
        }
        return randomLabel
    
    }
    

    【讨论】:

    • 技术上有效(在将代码的相关部分放入函数中并忽略您包含的不相关的didReceiveMemoryWarning/etc 之后),但将值硬编码在if/@987654324 @ 本身就是一个非常不优雅的解决方案。 switch/case稍微好一点,但只是稍微好一点。
    【解决方案4】:

    试试这个oneliner ;)

     randomLabel.textColor = UIColor(red : CGFloat(arc4random_uniform(255)) , green : CGFloat(arc4random_uniform(255)), blue : CGFloat(arc4random_uniform(255)) , alpha : 1)
    

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多