Ответ 1
РЕШЕНИЕ
Как оказалось, решение заключается в том, чтобы манипулировать временем начала слоя. Я попытаюсь объяснить это решение более подробно ниже. Существует два решения, использующих подкласс UIPercentDrivenTransition
или реализующий протокол UIViewControllerInteractiveTransitioning
. Пользовательский UIViewControllerInteractiveTransitioning находится на главной ветке, а реализация UIPercentDrivenTransition находится в ветке UIPercentDrivenTransitionImplementation.
https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation
ОБЪЯСНЕНИЕ
UIPercentDrivenTransition использует анимацию в animateTransition: для реализации updateInteractiveTransition:
. Я предполагаю, что они просто вызывают animateTransition:
из startInteractiveTransition:
, а затем устанавливают скорость слоя (возможно, содержимое контейнера) до 0.0 и манипулируют его timeOffSet
. Это позволяет им автоматически перемещать ваш переход назад и вперед. Это делает это для ваших анимаций UIView. По какой-то причине проблема с CAAnimations заключается в их свойствах begingTime
, timeOffSet
, speed
. Если вы установите их на разумные значения, вы можете перемещать весь анимированный контент в контейнереView взад и вперед. Я создал SCPercentDrivenTransition
вместо альтернативы UIPercentDrivenTransition
. Вам нужно только переопределить animateTransition: и вызвать handleGesture: от вызовов действий распознавателя жестов.