У меня есть два контроллера вида. Просмотр контроллера 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?