2014-11-08 6 views
2

Я хочу вызвать функцию 50 раз каждые 0,5 секунды с помощью NSTimer, но моими опциями являются таймер, выполняемый неограниченное время или создание таймеров, которые не повторяются. Могу ли я уйти с использованием таймеров, чтобы делать то, что я хочу, или попробовать попробовать что-то еще?Как я могу сделать NSTimer, который повторяется определенное количество раз?

+7

Добавить счетчик, аннулировать таймер после 50 звонков ...? –

+0

Нет третьего шага! ;) – rickster

ответ

6

Вам просто нужно отслеживать количество вызовов функций с помощью переменной класса.

После выполнения максимального количества вызовов функции вы останавливаете установку следующего таймера.

Использование класса IOS UIViewController в качестве примера:

class ViewController: UIViewController { 

    var timer:NSTimer? = nil; 
    var times:Int = 0; 

    override func viewDidLoad() { 
     super.viewDidLoad()   
     startTimer() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func startTimer() { 

     timer = NSTimer.scheduledTimerWithTimeInterval(0.5, 
               target: self, 
               selector: "onTick:", 
               userInfo: nil, 
               repeats: false) 

    } 

    func onTick(timer:NSTimer){ 
     println("Fired \(self.times)") 
     times += 1 
     // call your function 
     if times < 50 { // set the next timer 
      self.startTimer() 
     } 
    } 
+0

Не должно быть 'timer = NSTimer.scheduledTimerWithTimeInterval (0.5, target: self, selector:" onTick: ", userInfo: nil, repeat: false)' –

+0

Я выбрал значение 2.0 для быстрого тестирования. Обновит ответ –

+0

Спасибо, что помогает! Что означает «+ =»? –

0

Вы можете сделать таймер в функции с рекурсивным селектором и условием (timeoutCounter < 50):

class ViewController: UIViewController { 

    var timoutCounter:Int = 0 
    let kTimeoutWaitingTime = 50 

    override func viewDidLoad() { 
     super.viewDidLoad()   
     timeout() 
    } 

    func timeout() { 

     if timoutCounter < kTimeoutWaitingTime { 

      timoutCounter += 1  
      NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(ViewController.timeout), userInfo: nil, repeats: false) 

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