ユーザーが何回押したかに応じて0.5秒後に関数を呼び出すUIControlがあります。 (例:1を押すとf1()、2がf2()を押す、3がf3()を押す)Swift 3のメインスレッドで時間遅延の後に関数を呼び出す方法はありますか?
基本的には、ユーザーがコントロールを押したときにタイマーを設定する必要があります。コントロールが0.5秒間押されていない場合は、ダイアログを作成します。私は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)
}
operationQueue
とmainAsycQueue
は、それがより速くロードされるようにどのように私はメインスレッドで私の機能displayDialog()
を呼び出すことができます
self.currentTime = DispatchTime.now()
self.operationQueue = OperationQueue()
としてviewDidLoad
で定義されていますか?
問題は、あなたが他のスレッドでUIを更新しようとしているということですメインスレッドよりも。操作キューは必要なく、 'mainAsyncQueue'を作成する必要もありません。このコードでは、必要なのはメインキューだけです。 – Rob