Изменить временной интервал таймера - PullRequest
1 голос
/ 22 сентября 2011

вот мой вопрос: Можно ли увеличить scheduledTimerWithTimeInterval:2 например «3» через 10 секунд в ViewDidLoad, например. Например, из этого:

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(createNewImage) userInfo:nil repeats:YES];

к этому:

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(createNewImage) userInfo:nil repeats:YES];

спасибо извините за мой английский я французский: /

Ответы [ 2 ]

1 голос
/ 22 мая 2014

Перепланируйте таймер рекурсивно, как это:

float gap = 0.50;

[NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];

-(void) onTimer {
    gap = gap + .05;
    [NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];
}

========

Или согласно Как я могу обновить свой NSTimer при изменении значения интервала времени

Признать его недействительным:

[myTimer invalidate];

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

myTimer = nil;
myTimer = [NSTimer scheduledTimerWithTimeInterval:mySlider.value 
                                           target:self 
                                         selector:@selector(myMethod) 
                                         userInfo:nil 
                                          repeats:YES];
0 голосов
/ 22 сентября 2011

Используйте setFireDate: для перепланирования таймера.Вам нужно будет следить за таймером в иваре.Например:

@property (nonatomic, readwrite, retain) NSTimer *timer;

@synthesize timer=timer_;

- (void)setTimer:(NSTimer *)aTimer {
  if (timer_ != aTimer) {
    [aTimer retain];
    [timer_ invalidate];
    [timer_ release];
    timer_ = aTimer;
  }

- (void)dealloc {
  [timer_ invalidate];
  [timer_ release];
}

...

self.timer = [NSTimer scheduledTimerWithTimeInterval:...];

...

self.timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:3]; // reschedule for 3 seconds from now
...