これが私が包含APIを使用している方法です。ドキュメントによると、それは正しいです。
[self.childViewController willMoveToParentViewController:nil];
[UIView animateWithDuration:0.25 animations:^{
self.childViewController.view.frame = ... // View Animation
} completion:^(BOOL finished) {
[self.childViewController.view removeFromSuperview]; // triggers `viewWillDisappear`
[self.childViewController removeFromParentViewController];
}];
viewWillDisappear
アニメーションが始まる前viewDidDisappear
に呼び出され、アニメーションが完了した後に呼び出されることを期待しています。ただし、アニメーションが完了した後、両方ともすばやく連続して呼び出されます。
[self.childViewController.view removeFromSuperview];
アニメーションブロックに移動するとこれは修正されますが、コードは間違っているように見えます。
[self.childViewController willMoveToParentViewController:nil];
[UIView animateWithDuration:0.25 animations:^{
self.childViewController.view.frame = ... // View Animation
[self.childViewController.view removeFromSuperview]; // triggers `viewWillDisappear`
} completion:^(BOOL finished) {
[self.childViewController removeFromParentViewController];
}];
viewWillDisappear
正しい時間に呼び出されるための適切な方法を知っている人はいますか?
答えは– beginAppearanceTransition:animated:
&を使用することでしたendAppearanceTransition
カスタムコンテナコントローラーを実装している場合は、このメソッドを使用して、ビューが表示または非表示になりそうであることを子に通知します。viewWillAppear:、viewWillDisappear:、viewDidAppear :、またはviewDidDisappear:を直接呼び出さないでください。
修正されたコード:
[self.childViewController willMoveToParentViewController:nil];
[self.childViewController beginAppearanceTransition:NO animated:YES];
[UIView animateWithDuration:0.25 animations:^{
self.childViewController.view.frame = ...
} completion:^(BOOL finished) {
[self.childViewController.view removeFromSuperview];
[self.childViewController removeFromParentViewController];
[self.childViewController endAppearanceTransition];
}];
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加