Swift: 如何每秒随机更改背景颜色?

Swift: How can I change the background color randomly every second?

每次我打开应用程序时,下面的代码都会从我的颜色数组中随机提供一种背景颜色,但不会每秒更改颜色。我这里做错了什么?

import UIKit

class ViewController: UIViewController {

var timer = NSTimer()

func randomColorGenerator() -> Int{
    let randomColor = Int(arc4random_uniform(4))
    return randomColor
}

override func viewDidLoad() {
    super.viewDidLoad()
    let colors = [
        UIColor(red: 233/255, green: 203/255, blue: 198/255, alpha: 1),
        UIColor(red: 38/255, green: 188/255, blue: 192/255, alpha: 1),
        UIColor(red: 253/255, green: 221/255, blue: 164/255, alpha: 1),
        UIColor(red: 235/255, green: 154/255, blue: 171/255, alpha: 1),
        UIColor(red: 87/255, green: 141/255, blue: 155/255, alpha: 1)
    ]

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("randomColorGenerator"), userInfo: nil, repeats: true)

    let randColor = ViewController().randomColorGenerator()
    self.view.backgroundColor = colors[randColor]
}

试试这个代码:

import UIKit

class ViewController: UIViewController {
    var timer: NSTimer!

    func setRandomBackgroundColor() {
        let colors = [
            UIColor(red: 233/255, green: 203/255, blue: 198/255, alpha: 1),
            UIColor(red: 38/255, green: 188/255, blue: 192/255, alpha: 1),
            UIColor(red: 253/255, green: 221/255, blue: 164/255, alpha: 1),
            UIColor(red: 235/255, green: 154/255, blue: 171/255, alpha: 1),
            UIColor(red: 87/255, green: 141/255, blue: 155/255, alpha: 1)
        ]
        let randomColor = Int(arc4random_uniform(UInt32 (colors.count)))
        self.view.backgroundColor = colors[randomColor]
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("setRandomBackgroundColor"), userInfo: nil, repeats: true)
        self.setRandomBackgroundColor()
    }
}

我所做的更改:我已将您的 randomColorGenerator 函数重命名为 setRandomBackgroundColor。然后我让这个函数真正改变颜色,而不是仅仅计算和返回一些随机索引。

其他一些小改动:let randomColor = Int(arc4random_uniform(4)) 您可以使用 UInt32(colors.count) 而不是硬编码常量 4

var timer = NSTimer() – 你不需要初始化这个定时器,你以后不会使用这个初始值。只需声明变量类型就足够了:var time: NSTimer!

在您的初始示例中,您每秒都在计算随机索引,但您并没有使用它来实际设置背景颜色。

@glyuck 回答 2019 更新:

 override func viewDidLoad() {
    super.viewDidLoad()

    timer = Timer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(self.setRandomBackgroundColor), userInfo: nil, repeats: true)
    self.setRandomBackgroundColor()
}