我在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)
,但它没有暂停。拜托,我做错了什么?
你所做的是徒劳的(也是错误的)。接口中的更改在代码中是有序的,但在当前"事务"结束(即代码完成时)之前不会发生。因此,无论等待多长时间,在代码完成之前都不会看到更改。例如:
usleep(bigNumber)
self.view.backgroundColor = .red
usleep(bigNumber)
self.view.backgroundColor = .green
无论bigNumber
有多大,都不会看到任何红色。
但是,您根本不应该使用usleep
。你阻塞了主线程。这将冻结界面,看门狗进程将杀死你的应用程序作为惩罚。
你说它很好!但是传递给ussleep的5000是5000微秒。只有0.005秒。所以你1)睡眠时间不够长,2)它阻塞了主线程,所以你不会看到界面更新,直到它完成。因此,您将永远不会看到原始值。
调用ussleep不能完成这个任务。它会阻塞主线程,所以你永远无法完成你想要的。