2015-07-08 4 views
2

Я написал этот код, чтобы использовать таймер внутри View Controller:NSTimer не работает на быстром

var timer:NSTimer! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    timer = NSTimer(timeInterval: 2, target: self, selector: "goTakingPhoto", userInfo: nil, repeats: false) 
    timer.fire() 
    // Do any additional setup after loading the view. 
} 
func goTakingPhoto(){ 
    // doSomething 
} 

Но функция goTakingPhoto вызывается сразу, а не через 2 секунды. Может ли кто-нибудь мне помочь? Большое спасибо.

+0

Там есть альтернативный вариант для вас, если вы просто хотите создать задержку, когда вид нагрузки, 'NSTimer 'скорее всего, перебор. Вы можете использовать ГКД, чтобы добавить задержку без 'NSTimer' накладные расходы: ' dispatch_after (dispatch_time (DISPATCH_TIME_NOW, Int64 (2,0 * Двухместный (NSEC_PER_SEC))), dispatch_get_main_queue()) { self.goTakingPhoto() } ' Он выглядит намного сложнее, чем он есть, и я использую макрос (спасибо [Dash] [1]), поэтому мне не нужно набирать его каждый раз. [1]: https://itunes.apple.com/us/app/dash-3-api-docs-snippets/id449589707?mt=12&uo=4&at=11lMGu –

ответ

3

Попробуйте это:

override func viewDidLoad() { 
    super.viewDidLoad() 
    var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("goTakingPhoto"), userInfo: nil, repeats: false)} 
} 

func goTakingPhoto() { 
    // doSomething 
} 
+1

Да, он также должен удалить таймер .fire() ' – Kametrixom

+0

3q, он действительно работает – lwiu

0

Я нашел, что это работает с NSTimer.scheduledWithTimeInterval(...). И вы не должны добавить timer.fire() иначе FUNC будет вызываться imediately

Reference here

Смежные вопросы