Поиск…


параметры

параметр подробности
interval Время, в секундах, чтобы подождать, чтобы запустить таймер; или, повторяя таймеры, время между стрельбой.
target Объект для вызова selector
selector В Swift объект Selector определяющий метод вызова target
repeats Если значение false , прогоните таймер только один раз. Если значение true , запустите таймер каждый interval секунд.

замечания

NSTimer позволяет вам отправить сообщение в цель по истечении заданного периода времени.

Создание таймера

Это создаст таймер, чтобы вызвать метод doSomething для self через 5 секунд.

стриж

let timer = NSTimer.scheduledTimerWithTimeInterval(5,
                               target: self,
                             selector: Selector(doSomething()),
                             userInfo: nil,
                              repeats: false)

Swift 3

 let timer = Timer.scheduledTimer(timeInterval: 1,
                                        target: self, 
                                      selector: #selector(doSomething()), 
                                      userInfo: nil, 
                                       repeats: true)

Objective-C

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];

Установка повторений на false/NO означает, что мы хотим, чтобы таймер срабатывал только один раз. Если мы установим значение true/YES , оно будет срабатывать каждые пять секунд, пока оно не будет отменено вручную.

Ручное включение таймера

стриж

timer.fire()

Objective-C

[timer fire];

Вызов метода fire заставляет NSTimer выполнять задачу, которую он обычно выполнял по расписанию.

В неповторяющемся таймере это автоматически отключит таймер. То есть, вызов fire до того, как временной интервал будет завершен, приведет только к одному вызову.

В повторяющемся таймере это просто вызовет действие без прерывания обычного графика.

Недействительный таймер

стриж

timer.invalidate()

Objective-C

[timer invalidate];

Это остановит таймер от срабатывания. Должен быть вызван из потока, в который был создан таймер, см . Примечания Apple :

Вы должны отправить это сообщение из потока, на котором был установлен таймер. Если вы отправляете это сообщение из другого потока, источник входного сигнала, связанный с таймером, не может быть удален из цикла запуска, что может помешать правильному выводу потока.

Примечания. Как только таймер был признан недействительным, его невозможно запустить тот же самый недействительный таймер. Вместо этого вам нужно снова инициализировать недействительный таймер и вызвать метод пожара.

Параметры частоты таймера

Событие повторного таймера

стриж

class ViewController: UIViewController {
 
    var timer = NSTimer()
    
    override func viewDidLoad() {
        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
    }

    func timerMethod() {
        print("Timer method called")
    }

    func endTimer() {
        timer.invalidate()
    }
}

Swift 3

class ViewController: UIViewController {
     
        var timer = Timer()
        
        override func viewDidLoad() {
            Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: true)
        }
    
        func timerMethod() {
            print("Timer method called")
        }

        func endTimer() {
            timer.invalidate()
        }
    }

При необходимости может быть аннулировано вручную.

стриж

Не повторяющееся событие таймера с задержкой

NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: false)

Swift 3

 Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: false)

Таймер будет запущен один раз, через 3 секунды после выполнения. Будет автоматически аннулирована, после увольнения.

Передача данных с использованием таймера

Если вы хотите передать некоторые данные с помощью триггера таймера, вы можете сделать это с userInfo параметра userInfo .

Вот простой подход, который дает краткое представление о том, как вы можете передавать данные в запущенный метод из таймера.

[ Swift 3 ]

Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)

[ Цель - C ]

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:self
                                                    selector:@selector(iGotCall:)
                                                    userInfo:@"i am iOS guy" repeats:YES];

Вышеупомянутая строка кода, передающая ["Name": "i am iOS guy"] в userInfo . Итак, теперь, когда iGotCall получает вызов, вы можете получить переданное значение в соответствии с фрагментом кода.

[ Swift 3 ]

func iGotCall(sender: Timer) {
        print((sender.userInfo)!)
    }

[ Цель - C ]

- (void)iGotCall:(NSTimer*)theTimer {
    NSLog (@"%@", (NSString*)[theTimer userInfo]);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow