Я чувствую, что должен знать это, но я был озадачен в течение многих часов теперь, и у меня закончились идеи.
Теория проста, пользователь управляет масштабированием и располагающий в 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 орфографическими ошибками или любой другой причине.
Какие-либо идеи относительно того, почему это не работает?
Я думаю, что события таймера игнорируются во время отслеживания (когда палец опущен для прокрутки или масштабирования). Возможно, вам придется выполнить селектор в другом режиме (см. [NSObject performSelector: withObject: afterDelay: inModes:]
). В частности, попробуйте использовать @ [NSRunLoopCommonModes]
для режима.