手動ビュー包含を使用しているときに、viewWillDisappearが間違ったタイミングで呼び出されるのはなぜですか?

ロバート

これが私が包含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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ