У меня есть два контроллера вида. Просмотр контроллера A имеет UIScrollView
и представляет собой контроллер представления B. Презентация интерактивна и управляется с помощью scrollView.contentOffset
.
Я хочу интегрировать интерактивный переход перехода: при панорамировании, ViewController B должен быть отклонен в интерактивном режиме. Переключение интерактивного отклонения также должно контролировать прокруткуViewController A.
Моя первая попытка заключалась в использовании UIPanGestureRecognizer
и установке scrollView.contentOffset
в соответствии с запланированным расстоянием. Это работает, однако, когда жест панорамы закончился, смещение scrollView должно быть анимировано в конечную позицию. Использование -[UIScrollView setContentOffset:animated:
не является хорошим решением, поскольку оно использует линейную анимацию, не учитывает текущую скорость панорамирования и не замедляется.
Итак, я подумал, что можно было бы передавать события касания с моего распознавателя жестов в виде прокрутки. Это должно дать нам все приятное поведение анимации прокрутки.
Я попытался переопределить методы -touchesBegan/Moved/Ended/Cancelled withEvent:
в моем подклассе UIPanGestureRecognizer
следующим образом:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[scrollView touchesBegan:touches withEvent:event];
[scrollView.panGestureRecognizer touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
Но, по-видимому, что-то блокирует просмотр прокрутки из входа в режим tracking
. (Он идет на dragging = YES
, но об этом.) Я проверил scrollView userInteractionEnabled
, а не скрыт и добавил в иерархию представления.
Итак, как я могу переслать свои события касания на UIScrollView
?