2015-01-16 29 views
28

Bilgisayarda oyunun hareket etmesini geciktirmede bir sorunum var.NSTimer - Swift'de nasıl geciktirilir

Bazı çözümler buldum ama benim durumumda çalışmıyorlar, ör.

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

Ben işlevi fire ile değil, aynı zamanda hiçbir etkileri bu kullanmaya çalıştı.

Diğer olasılıklar nelerdir?

+2

Açıkça NSTimer'in ne yaptığını anlamıyorsunuz. Bir seçiciniz olmalı ve zamanlayıcı patladığında çalıştırmak istediğiniz bu yöntemde bir kodunuz olmalıdır. Seçici olmayan bir zamanlayıcı hiçbir şey yapmaz. – rdelmar

+0

Bu cevap sizin için aradığınız şeydir http://stackoverflow.com/a/24318861/3810673 – Ian

+0

çok teşekkür ederim! Seçiciyi anlamadım çünkü neden kesme noktası olmasın diye anlamıyorum. Ben oraya koydum ve her şey harika çalışıyor. – Dandy

cevap

92

Swift 3

:

func myPerformeCode() { 

    // here code to perform 
} 
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false) 
:
let delayInSeconds = 4.0 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) { 

    // here code perfomed with delay 

} 

veya bir zamanlayıcı ile

Swift 2 OBEB ile

:

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 

}) 

veya bir zamanlayıcı ile

:

biz Dispatch_after.

Swift 3.0 kullanarak geciktirebilirsiniz Swift ise

func myPerformeCode(timer : NSTimer) { 

    // here code to perform 
} 
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false) 
+0

, herhangi bir ekstra yöntem kullanmadan mükemmel bir çözümdür. Ana metoduma parametreler kullanma düşünmedim, teşekkürler! – Dandy

+0

Sadece geçmişte yaptığımı keşfeden bulunmak istedim :) –

2

: -

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

     alert.dismiss(animated: true, completion: nil) 
    } 
İlgili konular