Интерактивные переходы, как Apple это реализовала?
Я хотел бы знать, как Apple реализовала свою замечательную систему интерактивных переходов, и я думаю, что было бы интересно создать нечто подобное, как эксперимент.
Это мои мысли по поводу этой "проблемы".
Разработчик создает анимацию, в которой он нуждается UIView animationWithDuration
и эта анимация называется благодаря animatedTransition
:
-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
... Perform configurations, get data about from/to controllers.
[UIView animateWithDuration:self.presentationDuration
delay:0.0f
usingSpringWithDamping:0.4f
initialSpringVelocity:6.0f
options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.center = aValueFromPreviousConfig;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
Мое любопытство начинается здесь. Как, исходя из этого определения, Apple может выполнить интерактивный переход?
Как они берут анимацию, определенную в этой функции, и конвертируют ее в интерактивную?
Я предполагаю, что Apple использует что-то из своего нового API-интерфейса анимации ключевых кадров UIView, но я не могу найти способ сопоставить код, написанный в функции animatedTransition (это может быть любой код), и иметь произвольный процентный статус завершения анимации.
У вас есть мысли о том, как они это реализовали?
(пожалуйста... никаких слов вроде "Не могли бы вы просто использовать этот API, не зная, как он работает?").
1 ответ
Я обнаружил, что, вероятно, "трюк" - это просто запустить анимацию, а затем управлять скоростью слоя и смещением по времени с помощью этого кода:
CALayer *layer = self.theView.layer;
CFTimeInterval pausedTime = 2.0 * v;
layer.speed = 0.0;
layer.timeOffset = pausedTime;
Я делаю некоторые тесты, и это работает довольно хорошо:)