0

我在 iOS 中遇到问题。绿色的 ViewController 应该在几秒钟后变成红色,我有这个代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let ZeitZahl = arc4random_uniform(1499) + 6000
    usleep(ZeitZahl)
    update()
}

func update(){
    self.view.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1.0)
}

变成红色本身效果很好!但它没有耽搁,直接变成了红色!我已经尝试过,usleep(5000)而不是,usleep(ZeitZahl)但它没有暂停。请问,我做错了什么?

4

2 回答 2

2

你在做什么是徒劳的(而且是错误的)。接口中的更改在您的代码中排序,但在当前“事务”结束之前不会发生,即当您的代码完成时。因此,无论您等待多长时间,在您的代码完成之前您都不会看到更改。例如:

    usleep(bigNumber)
    self.view.backgroundColor = .red
    usleep(bigNumber)
    self.view.backgroundColor = .green

不管有多大bigNumber,你永远看不到任何红色。

但是,您根本不应该使用usleep。您正在阻塞主线程。这会冻结界面,并且 Watchdog 进程将杀死您的应用程序作为惩罚。

于 2016-10-17T18:10:19.887 回答
0

你说的很好!但是传递给 usleep 的 5000 是 5000 微秒。这只有 0.005 秒。所以你 1) 睡眠时间不够长,2) 它阻塞了主线程,所以在它完成之前你不会看到界面更新。所以你永远不会看到原始值。

但是,调用 usleep 不会完成此操作。它会阻塞主线程,所以你永远不会完成你想要的。

于 2016-10-17T18:09:53.040 回答