Мне кажется, что я должен это знать, но я был в тупике уже несколько часов, и у меня кончились идеи.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];
}
Это выход:
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 удаление таймера
Как вы можете видеть задержку между последним и вторым последних событий должно быть более чем достаточно для отложенного вызова выбора для выполнения.
Если я заменяю performSelector: withObject: withDelay с простым старым performSelector: Я получаю это:
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 удаления таймера
Что ISN» t, что я хочу, но служит, чтобы показать, что это только задержка, которая заставляет его не функционировать не что-то делать с тем, что селектор не объявляется в заголовке, является ошибкой или какой-либо другой причиной.
Любые идеи относительно того, почему он не работает?
похоже, что у вас есть точка. Интересно, почему эти события игнорируются. это выбор дизайна? есть ли какая-либо документация об этом? – erkanyildiz
Вы абсолютно правы. Это заставило меня замочить ...! –