web-dev-qa-db-ja.com

NSTimer-Swiftで遅延させる方法

ゲームでコンピューターの動きを遅らせる問題があります。

私はいくつかの解決策を見つけましたが、私の場合はうまくいきません。

var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)

関数fireでこれを使用しようとしましたが、効果もありませんでした。

他にどんな可能性がありますか?

30
Dandy

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)
100
valfer

with Swift 4.2

Timerを使用すると、セレクターの使用を避け、代わりにクロージャーを使用できます。

    Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
        // Your code here
    }

TimerCFRunLoopTimerでフリーブリッジされており、実行ループとGCDは2つのまったく異なるアプローチであることに注意してください。

4
eharo2

Swiftでは、Dispatch_after.

Swift 3.0:-

DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {

        alert.dismiss(animated: true, completion: nil)
    }
2
Ramakrishna

Grand Central Dispatchを使用してはどうですか?

https://developer.Apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html

ヴァルファーはあなたにその方法を示しました

0
JSA986