У меня есть два вложенных UIScrollView: родительский элемент ограничен горизонтальным перелистыванием, а дочерний элемент ограничен вертикальной прокруткой. Контент представляет собой одно большое представление, которое можно свободно перемещать, но оно привязано к одному из трех горизонтальных разделов. Поведение по умолчанию вложенных представлений прокрутки - разрешить прокрутку только в одном направлении за раз, но я хотел разрешить одновременное перетаскивание в обоих направлениях, чтобы сохранить ощущение манипулирования одним большим представлением.
Мое нынешнее решение включало изоляцию жеста представления вертикальной прокрутки и установку его делегата для моего контроллера представления:
for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers)
if ([gesture isKindOfClass:[UIPanGestureRecognizer class]])
gesture.delegate = self;
Затем я реализовал метод делегата, позволяющий распознавать жесты просмотра страниц одновременно с жестом панорамирования в представлении прокрутки:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.view == scrollView && otherGestureRecognizer.view == pageView)
return YES; // allow simultaneous scrolling of pageView and scrollView
return NO;
}
Это решение в основном работает, но иногда оно будет работать некорректно, когда я перетаскиваю представление, особенно когда я его перемещаю быстро с помощью мыши или перетащите его за пределы обзора. В частности, одно из представлений прокрутки временно вернется туда, где оно было начато, как если бы этот жест был отменен, но затем он вернется назад, если я продолжу прокрутку.
Я хочу знать, есть ли более простой или более надежный способ достижения такой прокрутки, который я упустил, или есть ли что-нибудь, что я могу сделать, чтобы устранить сбой.