IOS 7 UiviewControllerの遷移(具体的に具体的に)子ビューコントローラを使用することは可能ですか?
-
20-12-2019 - |
質問
新しいiOS 7 UiviewController遷移APIと非常に新しいインタラクティブな遷移APIを使用することについて浮上する多くのチュートリアルがあります。ただし、Custom UiviewControllerでのWWDC 2013ビデオにもかかわらず、子ビューコントローラの追加と削除を参照しても、Custom UiviewControllerの遷移にもかかわらず、Appleの従業員に遷移すると想像していることを示します。
(これをビューコントローラとして表示されていると仮定していると仮定しています。もう一方の後ろに表示させながら新しいUiviewControllerに移行できるとは思わない...)
子供ビューコントローラでそのようなものを達成することは可能ですか?
私の特定の状況では、子ビューコントローラとしてUIPageViewController
イメージギャラリーを追加していますが、UIPageViewController
がフルスクリーンを占めるイメージに追加されたView Controllerを表示することもできます。また、画像を画面からスライドさせる能力(iOS 7マルチタスク閉会)をスライドさせて、対話型ビューコントローラポップになることが大好きです。
そのようなことのためのチュートリアルはありますか?それは可能ですか?これは、どういうわけか私がその下のビューコントローラを見ることを可能にすることをどういうわけか?
解決
ビデオをもう一度見ている場合は、サポートされているプレゼンテーションスタイルUIModalPresentationCustom
を参照しています。このプレゼンテーションスタイルは、 'From' View Controllerのビューがビュー階層から削除されず、独自のフォームを作成することができます。だからあなたの場合には、次のことができます。
//insert code where you want the presentation to begin
UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];
.
あなたのアニメーショントランジションオブジェクトは、あなたのページビューコントローラフレームがフルスクリーンではないことを確認する責任があります。スクリーン上の2つの複雑なビューコントローラを同時に管理することの意味に注意してください。私はむしろあなたの最初のビューコントローラのスナップショットを見ることをお勧めし、それからそれを2番目のビューコントローラの背景ビューの背景にします。ページビューコントローラは、2番目のコントローラの子になります。
このチュートリアルの便利なものを見つけるかもしれません - http://www.teehanlax.com/ブログ/カスタムUiviewController-Transitions /
まだより良い、誰かがGithubでのサンプルを複製しました - https://github.com/soleares / SOLPRESENTINGFUN
ハッピーコーディング
他のヒント
UIViewControllerコンテナでカスタム遷移をしたいように聞こえます。これは、一般的な遷移よりも典型的な遷移よりも命題です。
必要なすべての方法にもかかわらず、このプロトコルは実装が難しいことではありません。ほとんどの方法は自明である。あなたは私がまだ直面していないいくつかのハードルに直面します。このプロトコルを実装しながら最近発見されたいくつかのヒントがいくつかあります:
-
あなた自身のキーを定義することを恐れてはいけません:
UIViewControllerContextTransitioning
。私は私のAnimatorオブジェクトの親ビューコントローラへの参照を必要としました。最もクリーンなソリューションは、この方法に渡す別のキーを定義していました。このプロトコルを実装するオブジェクトも親ビューコントローラである場合、これは非常にうまく機能します。 -
あなたのアニメーターを自分でインスタンス化するのではなく、
viewControllerForKey:
を呼び出して、AnimatorをVENDします。もう一度、これはプロトコルの意図の中で動作するので、これはクリーナーアプローチのように感じました。これは、そうでなければanimationControllerForPresentedController:presentingController:sourceController
の一部と呼ばれるであろう方法です。 -
presentViewController:animated:completion:
を使用します。あなたは特に子ビューコントローラについて話すので、あなたは本当にモーダルプレゼンテーションをしていません。 -
View Controllerの封じ込め呼び出しを追加します。あなたのアニメーターの
UIModalPresentationNone
。これはあなたがビューコントローラ階層にあなたの新しいビューコントローラを追加する場所です。