iOS 4.0以降を使用している場合、次のようにすると、まさにあなたが望んでいることを実行できます(確認のためにテストしました)
NewView *myNewView = [[NewView alloc] initWith.....];
[UIView transitionFromView:self.view toView:myNewView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
//[self.navigationController pushViewController:myNewView animated:NO];
[myNewView release];
編集:上記のコードを少し変更しています(新しいものは何もありません。ナビゲーションコントローラーは必要ないため、コメントアウトしているだけです)。
したがって、これにはいくつかの方法があります (次のビューを追跡する限り) が、これが私が考えることができる最も簡単な方法です。既にビュー 1 から 2 に切り替えることができるので、2 から 10 (または必要な数) に切り替える方法を説明します。
viewDidLoad
基本的に、次のビューに移動するための呼び出しをキャッチするには、ビューの遷移が長すぎます。そのため、後で切り替えるメソッドを待機して送信するタイマーを設定する必要があります。したがって、これはビュー 2 (および 3 と 4 など) に表示されるコードです。
- (void)viewDidLoad {
// this gets called before animation finishes, so wait;
self.navigationController.delegate = self;
// you will need to set the delegate so it can take control of the views to swap them;
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(switchView) userInfo:nil repeats:NO];
}
switch メソッドを呼び出すまで 1 秒しか待ちませんが、ビューに大量のデータをロードしている場合は、もう少し待つことをお勧めします。1.5 秒で十分ですが、それをいじって、どこで機能し、どこで機能しないかを確認できます。
次に、switchView
メソッドで次のビューを呼び出す必要があります。
- (void)switchView {
NextView *myNextView = [[NextView alloc] initWith ... ];
[UIView transitionFromView:self.view toView:nextView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
[nextView release];
}
これは私にとって完璧に機能しました。新しいビューを取得していることを確認するために、各ビューにタグを割り当て、各ビューのメソッドにサブビューとして UILabels を追加し、それぞれviewDidLoad
がそのビューの数を示しました。うまくいけば、これはあなたが必要としていたものです。もっと複雑なことをする必要があると思いますが、これにより、必要な外観を得るために必要なアニメーションとロジックが得られます。(ちなみに、viewDidAppear
これを行うときに呼び出されないように見えるため、viewDidLoad
本当に使用する必要がある場合は手動で呼び出す必要があるかもしれませんが、それ以外の場合は正常に動作します)