UINavigationBarをUINavigationControllerではなく、UIViewController等に独自に実装する場合、以下のようにします。
// ナビゲーションバーを生成
UINavigationBar* navBarTop = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
navBarTop.alpha = 0.7f;
// ナビゲーションアイテムを生成
UINavigationItem* title = [[UINavigationItem alloc] initWithTitle:@"Title"];
// 戻るボタンを生成
UIBarButtonItem* btnItemBack = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(clickBack:)];
// ナビゲーションアイテムの右側に戻るボタンを設置
title.rightBarButtonItem = btnItemBack;
// ナビゲーションバーにナビゲーションアイテムを設置
[navBarTop pushNavigationItem:title animated:YES];
// ビューにナビゲーションアイテムを設置
[self.view addSubview:navBarTop];
ナビゲーションアイテムを生成するときにタイトルを設定します。上記では「Title」という文字列を設定しました。これで画面上部に大きな文字で「Title」と表示されます。
また、ナビゲーションアイテムにiPhoneアプリでよく見られる、画面右上と左上に表示されるボタンなどを設置します。
上記では右上に「戻る」ボタンを追加していますが、leftBarButtonItemプロパティに設置すれば、左上にも表示できます。
UIBarButtonItemはカスタマイズ可能で、例えば
// segmentedControlはUISegementedControlのインスタンス
UINavigationItem* title = [[UINavigationItem alloc] initWithCustomView:segmentedControl];
等とすれば、ナビゲーションバーの内部にUISegmentedControlのインスタンスや、その他スライダー等、いろいろと設置することが可能なようです。
最後に「pushNavigationItem」でナビゲーションバーにアイテムを設置します。
「addSubview」を使いそうになりますので注意が必要です。
2011年1月18日火曜日
2011年1月9日日曜日
連続アニメーション
複数のアニメーションを連続して再生させるには、1つのアニメーションの終了を検知し、その後、続きのアニメーションを再生させます。
アニメーションの終了は「setAnimationDidStopSelector:finished:context:」でアニメーションの終了メソッドを登録しておきます。
[UIView beginAnimations:@"Animation1" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
// imgViewはUIImageViewのインスタンス
imgView.frame = CGRectMake(100, 200, imgView.frame.size.width, imgView.frame.size.height);
[UIView commitAnimations];
・
・
・
- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
if ([animationID isEqualToString:@"Animation1"]) {
[UIView beginAnimations:@"Animation2" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
imgView.frame = CGRectMake(100, 50, imgView.frame.size.width, imgView.frame.size.height);
[UIView commitAnimations];
上記例では、イメージ(imgView)を1秒間かけて(100, 200)に移動した後、続いて0.5秒間かけて(100, 50)に移動させます。
アニメーションの終了は「setAnimationDidStopSelector:finished:context:」でアニメーションの終了メソッドを登録しておきます。
[UIView beginAnimations:@"Animation1" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
// imgViewはUIImageViewのインスタンス
imgView.frame = CGRectMake(100, 200, imgView.frame.size.width, imgView.frame.size.height);
[UIView commitAnimations];
・
・
・
- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
if ([animationID isEqualToString:@"Animation1"]) {
[UIView beginAnimations:@"Animation2" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
imgView.frame = CGRectMake(100, 50, imgView.frame.size.width, imgView.frame.size.height);
[UIView commitAnimations];
上記例では、イメージ(imgView)を1秒間かけて(100, 200)に移動した後、続いて0.5秒間かけて(100, 50)に移動させます。
登録:
投稿 (Atom)