1

カスタム UIPresentationController を使用して、独自のアニメーションで続編を実行します。のprepareForSegue:

myDestinationController.transitioningDelegate = DBViewControllerTransitioningDelegate()
myDestinationController.modalPresentationStyle = .Custom

これは私のものDBViewControllerTransitioningDelegateです:

class DBViewControllerTransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate {

    func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
        return DBOverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }

    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return DBTransitioningAnimator()
    }
}

メソッドが呼び出されていないため、機能していません。しかし、私が設定したとき:

myDestinationController.transitioningDelegate = self

私のコントローラー内で、self私のすべてから2つのメソッドを追加してDBViewControllerTransitioningDelegateも問題ありません。これら 2 つのメソッドが呼び出されます。なんで?違いはなんですか?

4

1 に答える 1

3

transitioningDelegatein の宣言UIViewController:

weak var transitioningDelegate: UIViewControllerTransitioningDelegate?

ご覧のとおりtransitioningDelegate、参照を保持していweakます。ここでは誰も所有権を持っていないため、作成した直後にカスタム TransitioningDelegate インスタンスがリリースされました。「コントローラー」でデリゲートを採用し、それをtransitioningDelegate「誰か」に割り当てると、このデリゲートインスタンスが保持されます。

于 2015-11-16T10:34:17.297 に答える