0

これに困惑した。

ビューの 1 つに panGesture が追加された UIViewController サブクラスがあります。これは、UIViewController をサブクラス化する主な理由ではありません。また、他のviewControllerが継承する特定の美学も提供します。コントローラーは UIViewControllerTransitioningDelegate に準拠し、init が成功すると、それ自体に transitioningDelegate プロパティを設定します。また、modalPresentationStyle プロパティをカスタムに設定します。

これは、デリゲート メソッドで、表示と非表示用のアニメーター、および非表示用の対話コントローラーを提供します。これは単に UIPercentDrivenInteractiveTransition() のインスタンスです。

ちなみに、このビューは常に部分的に画面に表示されます。ジェスチャで閉じる場合、panGesture の yOffset が負の値でない限り、すべて正常に動作します。ジェスチャが負の Y オフセットで終了した場合、インタラクション コントローラーは予想どおりインタラクティブな遷移をキャンセルしますが、その後 panGesture によって登録されたすべてのタッチは視覚的に反映されません。

少し印刷した後、transitioningDelegate が削除されず、presentationStyle も変更されないことに気付きました。UIViewControllerTransitioningDelegate のデリゲート メソッドの呼び出しが停止します。その理由がわかりません。

これは、カスタム初期化子と NSCoder で必要な初期化子の後に呼び出されます。

private func setup() {

    transitioningDelegate = self
    modalPresentationStyle = .Custom
}

の中でviewDidLoad()、次のことが起こります。

panGesture.addTarget(self, action: "handlePan:")
panGesture.delegate = self
view.addGestureRecognizer(panGesture)

鍋の扱いはこんな感じです。

    switch gesture.state {

    case .Began :

        interactionController = UIPercentDrivenInteractiveTransition()
        dismissViewControllerAnimated(true, completion: nil)

    case .Changed:

        interactionController.updateInteractiveTransition(percentage)

    case .Cancelled, .Failed, .Ended:

        if (gesture.velocityInView(view).y < 0) {

            interactionController.cancelInteractiveTransition()
            if gesture.translationInView(view).y < 0 {

                print("This is when things go weird.")
            }

        }
        else {

            interactionController.finishInteractiveTransition()
        }

    default:

        let _ = 0
    }

そして、UIViewControllerTransitioningDelegate()interactionControllerDismissal のデリゲート メソッドは、次のような変数を返すだけです。

func interactionControllerForDismissal(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {

    return interactionController
}

画面に部分的にしか表示されていないため、viewController を正しく表示していませんか? これは画面に表示する正しい方法ですか?

4

0 に答える 0