iOS 5.0 +:
A UIWebView
содержит UIScrollView
для отображения своего содержимого и доступно свойству scrollView
UIWebView
.Итак, один из возможных способов сделать это - создать подкласс UIScrollView
и переопределить -touchesShouldBegin:withEvent:inContentView
.Вы можете получить количество нажатий на объект UITouch
из его свойства tapCount
, которое можно использовать для фильтрации жестов двойного нажатия и вызова супер-метода в противном случае.Это будет выглядеть примерно так:
-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view {
UITouch * touch = [touches anyObject]; //Get a touch object
if (2 == touch.tapCount) { //If this is a double-tap...
return NO; //...don't begin touches
}
else { //Otherwise, call the superclass' implementation
return YES;
}
}
Однако, чтобы установить представление прокрутки веб-представления в качестве пользовательского подкласса, вам также может понадобиться подкласс UIWebView
(который обычно не одобряется).С учетом вышесказанного, вероятно, будет работать подкласс UIWebView
и переопределение свойства scrollView
.В файле интерфейса:
@interface MyAwesomeWebView : UIWebView {
}
@property (nonatomic, readonly, retain) MyAwesomeScrollView * scrollView;
@end
И в файле реализации:
@implementation
@dynamic scrollView
@end
Тем не менее, действуйте с осторожностью.
Pre iOS 5.0:
Как написал Алан Мур в комментариях, вы можете добавить прозрачное представление поверх веб-представления, захватывать все сенсорные события с помощью тестирования попаданий и перенаправлять сенсорные события в веб-представление, если нет двойного касания.
РЕДАКТИРОВАТЬ: обновленный ответ, чтобы включить предостережения о подклассе UIWebView и т. Д. РЕДАКТИРОВАТЬ 2: Включен второй ответ для предварительной версии iOS 5.0