忍者ブログ

[PR]

2024年04月18日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

表示中のTabBarを回転させる

2010年04月26日
KigenをiPad対応にするために問題になったのが、標準のTabBarは表示中に回転しないということでした。でも、実はこの問題には簡単な解決方法があります。それはTabBarControllerのカスタムクラスを作り、それを回転対応にしてしまう事です。このように書くと何だか物凄い事をしているように思ってしまう人もいるかもしれませんが、実際の作業量は少ないです。

1.まずTabBarControllerから派生したクラスを作成します。ここではRotatableTabBarControllerとします。
2.shouldAutorotateToInterfaceOrientation:でTabBarの下部にあるviewControllerにもshouldAutorotateToInterfaceOrientation:メッセージを送信させるようにする。
3.InterfaceBuilderでTabBarControllerのクラスをRotatableTabBarControllerに変更する。

これだけでTabBarが本体の傾きに合わせて回転します。以下にRotatableTabBarControllerのヘッダファイルとメソッドファイルのソースを掲載します。まずヘッダファイルから。

//

//  RotatableTabBarController.h

//

//  Created by Konton on 10/04/21.

//  Copyright 2010 Konton. All rights reserved.

//

 

#import <UIKit/UIKit.h>

 

@interface RotatableTabBarController : UITabBarController {

}

 

@end


特に変更する部分は無いので空みたいなヘッダファイルです。次にメソッドファイルです。

//

//  RotatableTabBarController.m

//

//  Created by Konton on 10/04/21.

//  Copyright 2010 Konton. All rights reserved.

//

 

#import "RotatableTabBarController.h"


 

@implementation RotatableTabBarController

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

for(UIViewController *controller in self.viewControllers) {

BOOL b;

b = [controller shouldAutorotateToInterfaceOrientation:interfaceOrientation];

}

    return YES;

}

 

@end


メソッドファイルも単純で1つのメソッドが書かれているだけです。たったこれだけのソースで簡単に回転するTabBarになりますが、問題が起きる事もあります。表示の調整を各ViewControllerで行わせる際に、各ViewController自体が持つself.interfaceOrientationの値が正しい値になっていない事があることです。この問題には各ViewControllerにTabBarControllerから送られてきたinterfaceOrientationの値を保存する変数を作っておきshouldAutorotateToInterfaceOrientation:でその値を変更し、レイアウトの変更時にはそちらを参照するようにさせたり、直接RotatableTabBarController側のinterfaceOrientationを参照させることで対処可能です。回転させるとレイアウトが崩れる場合にはこのような対処が必要になります。

2010年4月30日追記:
この方法を使ってiPad上でTabBarを回転させていたKigen 2.1が無事承認されました。TabBarを表示すると画面が回転しないとお困りの方、この方法で回転させても問題はありませんのでご安心ください。
PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Trackback
トラックバックURL: