iOS 延迟更改背景颜色 (swift)

iOS changing background color with delay (swift)

我想设置视图的背景颜色,并在一定延迟后将其更改为另一种颜色。这是我的尝试方式:

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,该按钮将按预期运行并在延迟期间保持禁用状态。

你可以试试:

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

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

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

}

您的问题已通过使用 Timer 解决。只需将代码粘贴到 viewDidLoad 函数中即可。

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

您的 class

中的以下函数
@objc func change() {
  view.backgroundColor = .black  //change your color
}

创建这个函数(可以随时使用):

// 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
}

试试这个 swift 5

self.view.backgroundColor = UIColor( rgb: 0xFF0000)
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in
    self?.view.backgroundColor = UIColor( rgb: 0xFFFF00)
}