iOS меняет цвет фона с задержкой (swift) - PullRequest
0 голосов
/ 15 мая 2018

Я хочу установить цвет фона представления и изменить его на другой цвет после определенной задержки.Вот как я это попробовал:

print("setting color 1")
self.view.backgroundColor = UIColor( rgb: 0xFF0000)
print("sleeping")
sleep(3)
self.view.backgroundColor = UIColor( rgb: 0xFFFF00)
print("setting color 2")

Однако я не получил первый цвет.Приложение остается в своем первоначальном цвете, ждет 3 секунды и меняет цвет, а не цвет 2. Никаких признаков цвета 1. Как это исправить?

sleep(3), кажется, блокирует вид от обновления его цвета.Однако, если я позвоню myButton.isEnabled = false и установлю его после задержки обратно на true, кнопка будет работать как положено и останется отключенной во время задержки.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Ваша проблема решена с помощью таймера.просто вставьте код внутри функции viewDidLoad.

Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(change), userInfo: nil, repeats: false)

Следующая функция внутри вашего класса

@objc func change() {
  view.backgroundColor = .black  //change your color
}
0 голосов
/ 15 мая 2018

Создайте эту функцию (можно использовать в любое время):

// MARK: Create delay
func delay(_ delay: Double, closure: @escaping ()->()) {
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
}

Затем, чтобы создать нужный эффект, выполните:

self.view.backgroundColor = UIColor( rgb: 0xFF0000) // Display red

delay(3) {
    self.view.backgroundColor = UIColor( rgb: 0xFFFF00) // Display yellow
}
0 голосов
/ 15 мая 2018

Вы можете попробовать:

self.view.backgroundColor = UIColor( rgb: 0xFF0000)

DispatchQueue.main.asyncAfter(deadline: .now()+3.0 ) {

  self.view.backgroundColor = UIColor( rgb: 0xFFFF00)

}
...