ゲームでコンピューターの動きを遅らせる問題があります。
私はいくつかの解決策を見つけましたが、私の場合はうまくいきません。
var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)
関数fire
でこれを使用しようとしましたが、効果もありませんでした。
他にどんな可能性がありますか?
Swift
GCDの場合:
let delayInSeconds = 4.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
// here code perfomed with delay
}
またはタイマー付き:
func myPerformeCode() {
// here code to perform
}
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false)
スイフト2
GCDの場合:
let seconds = 4.0
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
// here code perfomed with delay
})
またはタイマー付き:
func myPerformeCode(timer : NSTimer) {
// here code to perform
}
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false)
with Swift 4.2
Timer
を使用すると、セレクターの使用を避け、代わりにクロージャーを使用できます。
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
// Your code here
}
Timer
はCFRunLoopTimer
でフリーブリッジされており、実行ループとGCDは2つのまったく異なるアプローチであることに注意してください。
Swiftでは、Dispatch_after.
Swift 3.0:-
DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {
alert.dismiss(animated: true, completion: nil)
}
Grand Central Dispatchを使用してはどうですか?
ヴァルファーはあなたにその方法を示しました