Я чувствую, что должен знать это, но я был в тупике часами, и у меня кончились идеи.
Теория проста, пользователь манипулирует масштабированием и позиционированием в виде прокрутки с помощью щепотки. Если они удерживают это повышение в течение короткого периода времени, тогда в представлении прокрутки записывается уровень масштабирования и смещения содержимого.
Так что я подумал, что я должен начать executeSelector: 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];
}
Это вывод:
2010-05-19 22: 43: 01.931 сброс таймера
2010-05-19 22: 43: 01.964 сброс таймера
2010-05-19 22: 43: 02.231 сброс таймера
2010-05-19 22: 43: 02.253 сброс таймера
2010-05-19 22: 43: 02.269 сброс таймера
2010-05-19 22: 43: 02.298 сброс таймера
2010-05-19 22: 43: 05.399 удаление таймера
Как видите, задержка между последним и вторым последними событиями должна была быть более чем достаточной для выполнения отложенного вызова селектора.
Если я заменяю executeSelector: withObject: withDelay на обычный старый executeSelector: я получаю это:
2010-05-19 23: 08: 30.333 сброс таймера
2010-05-19 23: 08: 30,333 позиция заблокирована
2010-05-19 23: 08: 30.366 сброс таймера
2010-05-19 23: 08: 30,367 позиция заблокирована
2010-05-19 23: 08: 30.688 удаление таймера
Это не то, что я хочу, но служит для того, чтобы показать, что это только задержка, из-за которой он не работает, а не то, что селектор не объявлен в заголовке, не является ошибкой или любой другой причиной.
Есть идеи, почему это не работает?