Интерактивные переходы, как 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, но я не могу найти способ сопоставить код, написанный в функции анимированного перехода (это может быть любой код), и произвольный процентный статус завершения анимации.

У вас есть мысли о том, как они это реализовали?

(пожалуйста... без шуток типа "Вы могли бы просто использовать этот API, не зная, как он работает?").


person MatterGoal    schedule 23.03.2014    source источник


Ответы (1)


Я обнаружил, что, вероятно, «хитрость» заключается в том, чтобы просто запустить анимацию, а затем управлять скоростью слоя и смещением времени с помощью этого кода:

CALayer *layer = self.theView.layer;
CFTimeInterval pausedTime = 2.0 * v;
layer.speed = 0.0;
layer.timeOffset = pausedTime;

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

person MatterGoal    schedule 23.03.2014