【问题标题】:iOS changing background color with delay (swift)iOS延迟更改背景颜色(swift)
【发布时间】:2018-10-25 01:45:10
【问题描述】:

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

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

【问题讨论】:

  • Dispatch.main.asyncAfter 试试这个

标签: ios swift delay background-color


【解决方案1】:

你可以试试:

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

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

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

}

【讨论】:

  • 错误:'+' 不是后缀一元运算符
  • @black 您需要用空格 (` `) 将 + 与其余部分隔开。后缀运算符是您暂时不需要了解的更高级的运算符
【解决方案2】:

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

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

类中的以下函数

@objc func change() {
  view.backgroundColor = .black  //change your color
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      Swift 5 试试这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        相关资源
        最近更新 更多