Ответ 1
1) Самый простой способ привязать жест к объекту UIViewControllerInteractiveTransitioning
делает его подклассом UIPercentDrivenInteractiveTransition
. Затем, где вы реализуете обработчик жестов, вы вызываете updateInteractiveTransition:
здесь пример с кодом:
-(void)handlePinch:(UIPinchGestureRecognizer *)pinch {
CGFloat scale = pinch.scale;
switch (pinch.state) {
case UIGestureRecognizerStateBegan: {
_startScale = scale;
self.interactive = YES;
[self.navigationController popViewControllerAnimated:YES];
break;
}
case UIGestureRecognizerStateChanged: {
CGFloat percent = (1.0 - scale/_startScale);
[self updateInteractiveTransition:(percent < 0.0) ? 0.0 : percent];
break;
}
case UIGestureRecognizerStateEnded: {
CGFloat percent = (1.0 - scale/_startScale);
BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
if (cancelled) [self cancelInteractiveTransition];
else [self finishInteractiveTransition];
break;
}
case UIGestureRecognizerStateCancelled: {
CGFloat percent = (1.0 - scale/_startScale);
BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
if (cancelled) [self cancelInteractiveTransition];
else [self finishInteractiveTransition];
break;
}
}
}
Этот код из https://www.captechconsulting.com/blogs/ios-7-tutorial-series-custom-navigation-transitions--more
2) Функция animateTransition
of UIViewControllerAnimatedTransitioning
используется для выполнения интерактивного перехода. Он автоматически разделяется на "ключевые кадры" благодаря вашему предыдущему вызову updateInteractiveTransition
. Но я полагаю, что если вы реализуете свой startInteractiveTransition:
метод UIViewControllerInteractiveTransitioning
(поэтому без использования подкласса UIPercentDrivenInteractiveTransition
), вы отвечаете за управление полным переходом (не уверен в этом.. извините, но документация, на мой взгляд, не действительно ясно).