ビューコントローラーをプッシュするときにカスタムアニメーションを表示したいと思います。「拡大」アニメーションのようなものを実現したいと思います。つまり、アニメーションの全画面表示中に[100,100 220,380].
どこから始めるべきか、それぞれドキュメント、チュートリアル、リンクはありますか? :)
わかった。次のコードでエキスパンドアニメーションを作成できます。
if ([coming.view superview] == nil)
[self.view addSubview:coming.view];
coming.view.frame = CGRectMake(160,160,0,0);
[UIView beginAnimations:@"frame" context:nil];
[UIView setAnimationDuration:4];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[coming viewWillAppear:YES];
[going viewWillAppear:YES];
coming.view.frame = CGRectMake(0, 0, 320, 480);
[going viewDidDisappear:YES];
[coming viewDidAppear:YES];
[UIView commitAnimations];
私のビューは適切に表示されますが、残念ながらナビゲーションバーは更新されません。手動でそれを行う方法はありますか?
サンプルコードでは、ビューの変換を更新する関数がすべて0.03秒呼び出されます。残念ながら、UIViewController
をプッシュすると、ビューのフレームのサイズを変更できません...私ですか?
できることは、次のように次のView Controllerをプッシュしますが、アニメーション化しないことです。
_[self.navigationController pushViewController:nextController animated:NO];
_
...そして、プッシュされているView Controllerで、CoreAnimationを使用してビューのカスタムアニメーションを作成できます。これは、viewDidAppear:(BOOL)animated
メソッドで行うのが最適です。
Core Animation Guide で実際にアニメーションを行う方法を確認してください。特に暗黙のアニメーションを見てください。
EDIT:更新されたリンク
次の関数(UINavigationController
に追加)を使用して、プッシュアニメーションをカスタマイズします。
- (void) pushController: (UIViewController*) controller
withTransition: (UIViewAnimationTransition) transition
{
[UIView beginAnimations:nil context:NULL];
[self pushViewController:controller animated:NO];
[UIView setAnimationDuration:.5];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationTransition:transition forView:self.view cache:YES];
[UIView commitAnimations];
}
このコードを適用して、好きなアニメーションを実行できると思います。
あなたが探しているコード:
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:0.80];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:
UIViewAnimationTransitionFlipFromRight
forView:self.navigationController.view cache:NO];
[self.navigationController pushViewController:menu animated:YES];
[UIView commitAnimations];
ハインリッヒ、
FacebookのiPhoneアプリのように、ビューを拡大または縮小する方法を示すYouTubeチュートリアルを作成しました。
それが助けになることを願っています: iPhone SDKでビューを拡大/縮小する方法
アダム
@zoul:それはうまくいきました! 「self」を「self.navigationController」に、「self.view」を「self.navigationController.view」に変更しただけです。それが必要かどうかはわかりませんが、うまくいきました。 @craftermは、ポップバックに関しては、viewDidLoadまたはViewWillAppearに次のコードを追加して、独自のleftBarButtonItemを作成します。
//add your own left bar button
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)];
self.navigationItem.leftBarButtonItem = backButton;
[backButton release];
次に、Push関数を微調整し、-backButtonTappedメソッドで呼び出したこのpopWithTransition関数を作成しました。
- (void) popWithTransition: (UIViewAnimationTransition) transition
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationTransition:transition forView:self.navigationController.view cache:YES];
[UIView commitAnimations];
[self.navigationController popViewControllerAnimated:NO];
}
アニメーションの後、popViewController呼び出しが最後まで下に移動していることに注意してください。それがコーシャかどうかはわかりませんが、繰り返しますが、うまくいきました。
ADTransitionController をご覧ください。これは、Applidiumで作成したカスタム遷移アニメーション(そのAPIはUINavigationControllerのAPIと一致します)によるUINavigationControllerの置き換えです。
Pushおよびpopアクションに異なる事前定義されたアニメーションを使用できますasSwipe、Fade、Cube、カルーセルなど。あなたの場合、あなたが要求しているアニメーションはZoomと呼ばれるものです。
必要なのは、 iphone developer cookbook の第2章のダウンロードです。 affineRotateサンプルを特に見てください。ただし、コアアニマチンサンプルのいずれかが役立ちます。