Извините, это повторяющийся вопрос, но я пробовал все решения, которые я мог найти без успеха.NSTimer не может остановиться?
В любом случае, вот моя проблема, в частности. У меня есть следующий код, где я запускаю таймер при длительном жесте нажатия, а затем останавливаю его, когда этот жест отменяется или когда действие завершено.
-(void)photoLongPress:(UILongPressGestureRecognizer *)press
{
NSTimer *timer = nil;
if (press.state == UIGestureRecognizerStateBegan)
{
//Start timer
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(photoLongPressTimer:) userInfo:nil repeats:YES];
}
if (press.state == UIGestureRecognizerStateEnded)
{
[timer invalidate];
timer = nil;
}
}
-(void)photoLongPressTimer:(NSTimer *)timer
{
DAProgressOverlayView *progress = (DAProgressOverlayView *)[self.view viewWithTag:kTagPhotoDeleteProgressIndicator];
progress.progress += 0.08;
if (progress.progress == 1)
{
[self deletePhotoSelection];
[timer invalidate];
timer = nil;
}
}
Таймер останавливается, когда недействительна в методе photoLongPressTimer
, но если этот жест останавливается в методе photoLongPress
. Почему это может быть? Я в тупике.
Спасибо.
Это прекрасно работает. Мне любопытно, однако, почему локальная переменная не работает, когда там (у листьев при первом появлении) кажется ссылкой на исходный объект? –
У вас есть ссылка, когда вы изначально создаете таймер, но каждый раз, когда жест меняется, метод вызывается снова, создается новая локальная ссылка (и устанавливается на нуль). – Wain