performSelector:withObject:afterDelay: не работа от scrollViewDidZoom

Я чувствую, что должен знать это, но я был озадачен в течение многих часов теперь, и у меня закончились идеи.

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

Таким образом, я думал, что запущу performSelector:withObject:withDelay на scrollViewDidZoom методе делегата. Если это истекает затем, я записываю настройки. Я удаляю запланированный вызов, которым называют каждый раз scrollViewDidZoom и когда жест повышения заканчивается.

Это - то, что я имею:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
    NSLog(@"resetting timer");
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(positionLock) object:nil];

    [self performSelector:@selector(positionLock) withObject:nil afterDelay:0.4];               
}

-(void)positionLock{
    NSLog(@"position locked ");
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{

    NSLog(@"deleting timer");
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(positionLock) object:nil];
}

Это - вывод:

19.05.2010 22:43:01.931 таймеров сброса
19.05.2010 22:43:01.964 таймеров сброса
19.05.2010 22:43:02.231 таймеров сброса
19.05.2010 22:43:02.253 таймеров сброса
19.05.2010 22:43:02.269 таймеров сброса
19.05.2010 22:43:02.298 таймеров сброса
19.05.2010 22:43:05.399 таймеров удаления

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

Если я заменяю performSelector:withObject:withDelay простым performSelector: Я получаю это:

19.05.2010 23:08:30.333 таймеров сброса
19.05.2010 23:08:30.333 положений заблокированы
19.05.2010 23:08:30.366 таймеров сброса
19.05.2010 23:08:30.367 положений заблокированы
19.05.2010 23:08:30.688 таймеров удаления

Который не является тем, что я хочу, но доказывает, что это - только задержка, которую это заставляет это не функционировать, не что-то, чтобы сделать с селектором, не объявляемым в заголовке, будучи написанным c орфографическими ошибками или любой другой причине.

Какие-либо идеи относительно того, почему это не работает?

9
задан 2 revs 19 May 2010 в 13:20
поделиться

1 ответ

Я думаю, что события таймера игнорируются во время отслеживания (когда палец опущен для прокрутки или масштабирования). Возможно, вам придется выполнить селектор в другом режиме (см. [NSObject performSelector: withObject: afterDelay: inModes:] ). В частности, попробуйте использовать @ [NSRunLoopCommonModes] для режима.

20
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: