Интерактивные переходы, как 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;

Я делаю некоторые тесты, и это работает довольно хорошо:)

Другие вопросы по тегам