2017-07-10 15 views
0

custom container view controllerを作成しようとしています。子ビューの追加をアニメーション化するために標準ViewControllerTransitioning patternを使用したいと思いますが、ちょっと残念です。子ビューコントローラの数が変わる可能性があるので、私はこのコンテナビューコントローラをコードで完全に書いています。UIViewControllerTransitioningプロトコルを使用しているときにAutoLayout制約を作成する必要があります

私はすでにthis tutorialを見てきました。それは私を非常に助けてくれましたが、私はこのステップを理解できません。

新しい子ビューコントローラを追加する流れは次のように現在:コンテナビューコントローラが必要としないような位置決め/高さの制約は、コンテナビューに(とされる)を作成することができます

'MyContainerVc'.addNewSubViewController 
    Call UIViewController.addChildViewController 
    Create transitioning context 
    Fetch animator 
    Animate 
    'Container View'.addSubview 
     Create autolayout positioning/height constraints 

子のvcsがコンテナvcにpreferredContentSize.widthを指定できるので、コンテナのビューコントローラで幅の制約を作成する必要があります。コンテナvcは、可能な限り子のvcsの優先順位を尊重し、可能な限り幅の制約に基づいています。

サブビューの幅の制約をいつ作成できるかわかりません。子ビューが表示される前に幅を定義する必要があるため、アニメーションを実行する前に制約を適用する必要があります。しかし、子ビューがサブビューとして追加される前にアクティブ化することはできません。また、アニメーションが完了した後にアクティブ化すると、アニメーション中にその幅が正しく定義されません。

アニメーターは、transitioningContextのみを使用し、コンテナビューのaddSubviewメソッドを使用する必要があります。これは、アニメーション化されているトランジションの種類には関係しません。

また、addSubviewに自動レイアウト制約を作成するのが最善の方法ですか、それとも別の場所で行う必要がありますか。 didAddSubview

いくつかのアドバイスは非常に高く評価されています!

答えて

0

私はそれを理解したと思います。コンテナ・ビュー・コントローラに幅制約を作成するように指示する関数を指定するデリゲート・プロトコルを作成し、そのメソッドをコンテナ・ビューのaddSubviewでコールします。

関連する問題