以下に非常によく似たコードを使用しています:
- (void)flipToViewController:(UIViewController*)targetViewController
transition:(UIViewAnimationTransition)transition
{if(targetViewController){[[[self activeViewController] view] setUserInteractionEnabled:NO];
// force the view to be instantiated (loadView/layoutSubviews)
[[targetViewController view] setHidden:NO];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationTransition:transition forView:self.view cache:YES];
[targetViewController viewWillAppear:YES];
[[self activeViewController] viewWillDisappear:YES];
[[[self activeViewController] view] removeFromSuperview];
[[self view] addSubview:[targetViewController view]];
[[self activeViewController] viewDidDisappear:YES];
[targetViewController viewDidAppear:YES];
[[targetViewController view] setUserInteractionEnabled:YES];
[UIView commitAnimations];
[self setActiveViewController:targetViewController];
}
}
フリップトランジションを使用していますが、targetViewControllerがビューにフリップすると、ビューが正しく初期化されません。UISegmentedControlが奇妙に見え、1つのサブビューが間違った位置にあります。
アニメーションが終了して初めて、すべてが正しい場所に落ち着きます。
私はすべてのサブビュー設定をviewWillAppear(viewDidAppearではない)で行っているので、なぜそれが時間内に初期化されないのか理解できません。
助言がありますか?
また、(デバッグ後)viewWillAppearがviewDidLoadメソッドの前に呼び出されることに気付きましたか?なぜこれを行うのでしょうか?