0

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 は新しい UIView Key-Frame Animations API を使用していると思いますが、animatedTransition 関数内に記述されたコード (コードは何でもよい) と一致する方法が見つからず、アニメーションの完了の任意のパーセンテージ ステータスです。

彼らがそれをどのように実装したかについて、考えはありますか?

(お願いします...「この API がどのように機能するかを知らなくても、この API を使用できますか?」のような言葉はやめてください)。

4

1 に答える 1

0

おそらく「トリック」は、アニメーションを開始してから、次のコードでレイヤーの速度とタイムオフセットを管理することであることがわかりました。

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

私はいくつかのテストを行っていますが、それは非常にうまく機能します:)

于 2014-03-23T17:16:02.197 に答える