Догадаться. В моем случае мой UIScrollView содержал UIImage, масштабирование которого я разрешил. По-видимому, это означало, что прокрутка включена, и у UIScrollView возникли проблемы с различением жестов, предназначенных для прокрутки, и смахивания (следующее, предыдущее изображение).
Ключевым моментом в моем случае является отключение прокрутки в представлении прокрутки, когда изображение не увеличено, и повторное включение его при увеличении. Это обеспечивает ожидаемое поведение.
Критическая часть заключается в том, чтобы поместить следующее в делегат представления прокрутки:
- (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];
}
person
David
schedule
06.09.2010