Вложенные UIScrollViews прокручиваются одновременно

У меня есть два вложенных 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;
}

Это решение в основном работает, но иногда оно будет работать некорректно, когда я перетаскиваю представление, особенно когда я его перемещаю быстро с помощью мыши или перетащите его за пределы обзора. В частности, одно из представлений прокрутки временно вернется туда, где оно было начато, как если бы этот жест был отменен, но затем он вернется назад, если я продолжу прокрутку.

Я хочу знать, есть ли более простой или более надежный способ достижения такой прокрутки, который я упустил, или есть ли что-нибудь, что я могу сделать, чтобы устранить сбой.

6
задан trevorsm 12 October 2010 в 20:03
поделиться