ユーザーがナビゲートするUINavigationControllerがあります。特定のUIViewControllerをナビゲーションスタックにプッシュすると、ナビゲーションバーに「設定」ボタンが表示されます。ユーザーがこのボタンをクリックしたときに、現在のビュー/コントローラー、つまりナビゲーションバーを含む画面上のすべてのものを設定ビューに切り替えたいと思います。
したがって、navigationControllerスタックにあるCurrentViewControllerからフリップしたいSettingsViewControllerがあります。
これを行おうとすると、あらゆる種類の奇妙な動作が発生します。SettingsViewControllerに属するUIViewがアニメーションを開始し、所定の位置にスライドし、navigationButtonが動き回り、私が思うように何も動作しません。
-(void)settingsHandler {
SettingViewController *settingsView = [[SettingViewController alloc] init];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.navigationController.view
cache:YES];
[self.navigationController.view addSubview:settingsView.view];
[UIView commitAnimations];
}
上記の結果、ビューは正しく反転しますが、SettingsViewControllerのサブビューはすべて(0、0)に配置され、遷移後、所定の位置に「スナップ」しますか?
このように、サブビューをインスタンス化してviewDidLoadに追加したためですか?
- (void)viewDidLoad {
UIImageView *imageBg = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 460.0f)];
[imageBg setImage:[UIImage imageNamed:@"background.png"]];
[self.view addSubview:imageBg];
[imageBg release];
SettingsSubview *switchView = [[SettingsSubview alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 460.0f)];
[self.view addSubview:switchView];
[switchView release];
[super viewDidLoad];
}
1:UINavigationControllerのUIViewController内から、新しいUIViewControllerに、続いて新しいUIViewControllerから、UINavigationControllersスタックにある「元の」UIViewControllerに戻る「フリップ」遷移を正しく行うにはどうすればよいですか?
2:サブビューをインスタンス化してUIViewControllerに追加する場合、「viewDidLoad」メソッドとは異なるアプローチを使用する必要がありますか?
-質問2は、より「ベストプラクティス」です。私はそれを行うさまざまな方法を見てきましたが、ライフサイクルドキュメントと、このテーマに関するさまざまなスレッドや投稿を見つけたり理解したりするのに苦労しています。「ベストプラクティス」の例がありません。
助けてくれてありがとう:)