私は同じ問題に遭遇し、それを解決することができました。
カスタム トランジション API は十分に文書化されておらず、すべてを正しく行うには多くの試行錯誤が必要でした。
メモリの問題なしでうまく機能させる方法を説明しましょう。
プレイヤーは次のとおりです。
VCA = VCB をモーダルに
表示するビュー コントローラー VCB = モーダルに表示されるビュー コントローラー (VCA によって提示される)
TC = カスタム アニメーションを実行するカスタム トランジション コントローラ オブジェクト。「 UIViewControllerAnimatedTransitioning
」
に準拠した NSObject サブクラス。
TD 内でインスタンス化されます。
TD = システムにトランジション コントローラーを提供するカスタム トランジション デリゲート オブジェクト。「 UIViewControllerTransitioningDelegate」に準拠した NSObject サブクラス
それでは、VCB のインスタンスを示しましょう。
self = VCA のインスタンス
myModalViewController = self の強力なプロパティです
self.myModalViewController = [[VCB alloc] init];
[self.myModalViewController setModalPresentationStyle: UIModalPresentationCustom];
[self.myModalViewController setTransitioningDelegate: [[TD alloc] init]];
[self presentViewController: self.myModalViewController
animated:YES
completion:NULL];
その後のある時点で、VCB は VCA に却下を要求します。
self = VCA のインスタンス
myModalViewController = 以前に提示された VCB のモーダルに提示されたインスタンス
[self dismissViewControllerAnimated:YES
completion:^{
[self.myModalViewController setTransitioningDelegate: nil]; // DO THIS!!!!
self.myModalViewController = nil;
}];
これが役立つことを願っています。それは確かに私のためにしました。