0

標準のプッシュ遷移である遷移を行うことに興味がありますが、toViewController が所定の位置にスライドしている間、fromViewController は選択された UIView を toViewController の上に保持します。これを以下にモックアップしてみました。

左側のボックスは UIView と 3 番目のボックスを表します (茶色の one_ はクリックされたものです。中央の図では、fromViewController が左にスライドします (前に toViewController がスライドします。選択された UIView は所定の位置に留まり、フェードアウトするアニメーションがあります。

ここに画像の説明を入力

私はカスタム トランジションにあまり詳しくありませんが、これがどのように行われるかを考えています。おそらくContainer View Controllerのコンテキストにありますが、正直なところ、確かではありません. この効果を達成する方法についてのアイデアはありますか? ユーザーが「戻る」ボタンを押したときに効果を逆に実行することも可能であることを願っています。

4

1 に答える 1

0

実装は非常に簡単です。まず、カスタム Container Controller を作成します。ナビゲーション コントローラーのようなコントローラー スタックが必要ですか? はいの場合、実装はかなり複雑になります。とにかく、次のようになります。

- (void)showViewController:(UIViewController *)viewController
              selectedView:(UIView *)selectedView
{
    // Tell prev. controller about pending removing
    [_currentController willMoveToParentViewController:nil];

    // Add the next controller
    [self addChildViewController:viewController];

    // Move selected view to the Containers view
    [self.view addSubview:selectedView];

    // Add toView below fromView
    [self.view insertSubview:viewController.view 
                belowSubview:_currentController.view];

    // Animate whatever you need
    [UIView animateWithDuration:0.25
                     animations:^
     {
         // Move from view
         CGPoint fromViewCenter = viewController.view.center;
         fromViewCenter.x = -0.5 * viewController.view.frame.size.width;
         viewController.view.center = fromViewCenter;

         // Fade out the selected view 
         selectedView.alpha = 0;
     }
                     completion:^
     {
         // Clean
         [_currentController.view removeFromSuperview];

         // Finally remove prev. controller from the hierarchy
         [_currentController removeFromParentViewController];

         // Notify 
         [viewController didMoveToParentViewController:self];
     }];

}

自力で逆転できることを願っています。

于 2014-08-07T13:45:32.720 に答える