Ответ 1
Выяснил это. В моем случае мой UIScrollView содержал UIImage, который я разрешил масштабирование. По-видимому, это означало, что прокрутка включена, и UIScrollView испытывает трудности с различием жестов, предназначенных для прокрутки vs swipe (следующее, предыдущее изображение).
Ключ в моем случае - отключить прокрутку в прокрутке, когда изображение не увеличено, и переименовать его при его увеличении. Это обеспечивает ожидаемое поведение.
Критическая часть состоит в том, чтобы поместить в делегат просмотра прокрутки следующее:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (scrollView.zoomScale!=1.0) {
// Zooming, enable scrolling
scrollView.scrollEnabled = TRUE;
} else {
// Not zoomed, disable scrolling so gestures get used instead
scrollView.scrollEnabled = FALSE;
}
}
Мне также нужно инициализировать представление прокрутки с отключенной прокруткой. Чтобы включить масштабирование, просто подайте изображение на вызов делегата,
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the scroll view
return myImage;
}
И установите несколько парм в viewDidLoad для распознавания и настройки жестов также
- (void)viewDidLoad {
[super viewDidLoad];
myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);
myScrollView.maximumZoomScale = 4.0;
myScrollView.minimumZoomScale = 1.0;
myScrollView.clipsToBounds = YES;
myScrollView.delegate = self;
[myScrollView addSubview:myImage];
[self setWantsFullScreenLayout:TRUE];
myScrollView.scrollEnabled = FALSE;
UISwipeGestureRecognizer *recognizer =
[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
recognizer.delaysTouchesBegan = TRUE;
[myScrollView addGestureRecognizer:recognizer];
[recognizer release];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[myScrollView addGestureRecognizer:recognizer];
[recognizer release];
[myScrollView delaysContentTouches];
}