programmableのブログ

programmableのブログ

ブログの説明を入力します。

Amebaでブログを始めよう!
ローカライズを初めて行う場合、まずxcode上でビルドの前にクリーンする必要がある。
その理由は、ローカライズしている場合のバンドルでのリソースの探し方にある。
まずルートディレクトリを探し、それが無ければlprojディレクトリを探すため、
ルートにリソースが残ったままだと、ローカライズしたファイルの前にルートのリソースがヒットしてしまう。
結局、ローカライズされないことになってしまうので、
クリーンを忘れずに行うこと。
iOS6になって、shouldAutorotateとsupportedInterfaceOrientationsを
オーバーライドして画面の自動回転を制御するようになった。
ここで、自動回転が設定した通りにならない、というトラブルに見舞われたが、
どうもUINavigationControllerがルートに設定されていることに原因があるようだ。
そこで、UINavigationControllerのサブクラスを設定して
オーバーライドを行う形にしたところ、問題が解決した。
info.plistに問題があるケースや、
setRootViewControllerではなくaddSubViewで設定してしまっているケース
等もあるようなので、気をつけたい。

@interface rotateUINavigationController : UINavigationController

@end
@implementation rotateUINavigationController

-(BOOL)shouldAutorotate{
        return YES;
}
-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

@end
以前はInfoPlist.stringsのインスペクタから対応言語の追加を行っていたが、
現在はプロジェクトファイルのproject→infoから追加を行う。
UIViewControllerの派生クラスを作成する際に用意されるxibファイルは、
UIViewController派生クラスのインスタンスを作成する時ではなく、
そのクラスが管理するUIViewインスタンスを生成するもの。
画像ファイルはUIImageの簡易コンストラクタを使って
UIImage* image = [UIImage imageNamed:@"camera.png"];
等とするのが一般的。

画像以外のアプリケーションバンドルに含めたファイルについては
NSBundleクラスを利用する。