Для этого вы бы сохранили NSTimer
переменную экземпляра.Как только ваше представление станет полностью видимым, что вы можете заметить, например, реализовав замирание в делегате анимации, вы инициализируете его следующим образом:
_fadeTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fade:) userInfo:nil repeats:NO];
Убедитесь, что _fadeTimer является переменной экземпляра, вам необходимо иметь возможностьсбросить его.Затем реализуйте метод затухания:
- (void)fade:(NSTimer *)aTimer {
// Forget about timer!
_fadeTimer = nil;
[UIView beginAnimations:nil context:NULL];
// fade here
[UIView commitAnimations];
}
При каждом взаимодействии с пользователем вы просто вызываете метод, который задерживает затухание.Для этого удалите и заново создайте таймер.Или измените дату запуска:
- (void)delayFade {
[_fadeTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: 2.0]];
}
PS: Нет необходимости явно сохранять таймер.Он сохраняется в runloop, пока не сработает.После обратного вызова он будет выпущен в любом случае.Просто убедитесь, что вы всегда сбрасываете переменную на nil
, иначе ваше приложение может потерпеть крах при неправильном доступе.Если вам нужно удалить время до его запуска, вызовите метод invalidate
.