我有一个 UIControl,它会在 0.5 秒后调用一个函数,具体取决于用户按下它的次数。(例如,按 1 次调用 f1(),按 2 次调用 f2(),按 3 次调用 f3())
所以基本上我需要在用户按下 Control 时设置一个计时器。如果 0.5 秒内未按下 Control,则创建一个对话框。我尝试过使用 DispatchQueue,但是当它到达创建对话框时,需要几秒钟的时间。我认为这是因为它是同时调用的,而不是在主线程上调用的(如果术语不好,请原谅)。
self.operationQueue.cancelAllOperations() //To cancel previous queues
self.mainAsyncQueue = DispatchQueue(label: "bubblePressed" + String(describing: DispatchTime.now()), qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent)
let time = DispatchTime.now()
self.currentTime = time
self.mainAsyncQueue!.asyncAfter(deadline: time + 0.5){
guard self.currentTime == time else {
return
}
let tempOperation = BlockOperation(block:{
self.displayDialog()
})
self.operationQueue.addOperation(tempOperation)
}
Run Code Online (Sandbox Code Playgroud)
operationQueue并被mainAsycQueue定义viewDidLoad为
self.currentTime = DispatchTime.now()
self.operationQueue = OperationQueue()
Run Code Online (Sandbox Code Playgroud)
如何displayDialog()在主线程中调用我的函数以使其加载速度更快?
根据问题标题,答案是:
let deadlineTime = DispatchTime.now() + .seconds(1)
DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
//update UI here
self.displayDialog()
}
Run Code Online (Sandbox Code Playgroud)
或者
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.displayDialog()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9075 次 |
| 最近记录: |