お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

iPhone5/iOS6になってのTips

viewDidunLoadは呼ばれない

これけっこう気をつけること。

NotificationとかObserverとか、

removeしてあげないといつまでも通知してくれる健気な彼ら。

プログラムに旋風を巻き起こすことになります。

結果、

「なんでこのメソッド2回も呼ばれるんだ..!」とか、

「呼ばれる回数がどんどん増えている..!怪現象か..!」とか、

そんなことになるので、

viewWillDisappearでremoveしてあげること。

ということはセットするのはviewWillAppearとかが良いですね。

 

iPhone5でのimageNamedでの画像指定

用意する画像は3つ

・abc.png

・abc@2x.png

・abc-568h@2x.png

iPhone4SのRetina Displayでは

UIImage* image = [UIImage imageNamed:@"abc.png"];

と書けば呼び出してくれる。

でiPhone5ではっていうと、

UIImage* image = [UIImage imageNamed:@"abc-568h.png"];

とすれば良いです。

この場合に、abc-568h.pngとかっていう画像は不要です。

3種類あればok。

(ただし568-h@2xサイズを用意してね)

それはなぜかっていうと、画像ファイルのほうに@2xとついていると、

自動的に「Retinaサイズだ!」と認識してくれるから。

かつ、568hの画像(=iPhone5)は必ずRetina Displayなので、

1/2サイズは用意しなくていい。

 

if (IPHONE5) {

  image = [UIImage imageNamed:@"abc-568h.png"];

} else {

  image = [UIImage imageNamed:@"abc.png"];

}

 

みたいな感じ!

ちなみにIPHONE5てのはマクロ定義してます。こんな感じ。

#define IPHONE5 ([UIScreen mainScreen].bounds.size.height == 568)

むしろもう3Gとか対応するのいいんでは..orz って思ってしまうけど

まだ若干ユーザーいるみたいね。