Поиск…
параметры
параметр | подробности |
---|---|
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]);
}