Мой код ниже дает мне случайный цвет фона из моего массива цветов каждый раз, когда я открываю приложение, но не меняет цвет каждую секунду. Что я здесь сделал не так?

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]
}
3
D.Khan 20 Фев 2016 в 12:31

2 ответа

Лучший ответ

Попробуйте этот код:

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!

В вашем первоначальном примере вы вычисляли случайный индекс каждую секунду, но вы не использовали его тогда для фактической установки цвета фона.

4
glyuck 20 Фев 2016 в 09:44

@glyuck ответ 2019 обновление:

 override func viewDidLoad() {
    super.viewDidLoad()

    timer = Timer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(self.setRandomBackgroundColor), userInfo: nil, repeats: true)
    self.setRandomBackgroundColor()
}
1
Boris Detry 10 Июн 2019 в 20:09