我在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)
进行了尝试,但它没有暂停。拜托,我做错了什么?
答案 0 :(得分:2)
你正在做的事是徒劳的(和错误的)。界面中的更改已订购,但在当前"事务"之前不会发生结束,即代码完成时。因此,无论您等待多久,在代码完成之前,您都不会看到更改。例如:
usleep(bigNumber)
self.view.backgroundColor = .red
usleep(bigNumber)
self.view.backgroundColor = .green
无论bigNumber
有多大,您永远不会看到任何红色。
但是,您根本不应该使用usleep
。你正在阻止主线程。这冻结了界面,看门狗进程将杀死你的应用程序死亡作为惩罚。
答案 1 :(得分:0)
你说的很好!但5000传递给我们的是5000微秒。那只有0.005秒。所以你1)没有睡得足够长,2)它会阻塞主线程,所以你不会看到界面更新,直到它完成。所以你永远不会看到原来的价值。
虽然打电话给我们睡觉也不会这样。它会阻止主线程,所以你永远不会完成你想要的。