Maccle

[Obj-C]iPhone 5(4インチ)とiPhone 4S以下で表示画像を自動で判別させる方法

約 4 分

あぁ、iPhone 5から4インチRetinaディスプレイ(640px x 1136px)となり、iPhone 4Sまでの 3.5インチディスプレイを前提としていたアプリを今更ながら見直す必要がでてきました。

アプリ自体を4インチディスプレイ対応にする方法も含めて、一通り以下のようにして対応させることができました。

4インチRetinaディスプレイ対応アプリにする

まずはここから。

アプリ起動時に4インチディスプレイ対応アプリとしてiOS上で起動するには、Xcodeで 4インチRetinaディスプレイ用の起動イメージ(Launch image)として “Default-568h@2x.png”(640px x 1136px) というファイル名の画像を含めるだけでiOSが自動で判断してくれます。default-568h@2x

画像ファイル名だけで4インチ用と3.5インチ用を自動で判断させる

4インチディスプレイ用の起動イメージが “Default-568h@2x.png” だからって、Retinaになったときに”ファイル名@2x” で判別してくれたときと同じように、 “ファイル名-568h@2x” という画像ファイル名にすれば自動的に4インチRetinaディスプレイ用イメージとしてiOSが扱ってくれると思ったら大間違い!!(泣)

じゃ、”self.view.bounds.size.height” で 568ピクセル(もしくは480ピクセルより大)かをいちいち判定して UIImageやらのインスタンスを生成する??

なにいってんのムリムリ!

既存のアプリをiPhone 5に対応させる場合なら膨大な修正が必要だし、なによりそんなことしたら今後またどんなハードの仕様変更があるかわからないので、それじゃあまりにもやっつけすぎでメンテ効率が悪すぎます。

やっぱりファイル名だけで4インチディスプレイ用の画像としてアプリ内で判断してくれるほうが効率がいい…

「じゃ、どうするか。…コレでしょ!!」

ということで、以下のUIImageを継承したカスタムクラスを、アプリのデリゲートのヘッダにインポートするだけで、”ファイル名-568h@2x” という名前の画像ファイルがあれば4インチ用のイメージとしてアプリ側で自動的に利用してくれます。

以下の “UIImage+H568.h と “UIImage+H568.m” をXcodeのプロジェクトに組み込んで、デリゲートのヘッダに import してください。

UIImage+H568.h

UIImage+H568.m

あとは、4インチRetinaディスプレイのみで表示させたい画像のファイル名と拡張子の間に、”-568h@2x” を加えるだけ!

4インチ用のイメージの振り分けに困っていた人は是非これを利用してみてください!

Windowのサイズを起動する端末のディスプレイサイズごとに合わせる

Interface Builderで最初のウインドウとビューを作ってしまっている場合は特に、ウインドウやビューのサイズが実際のディスプレイサイズとは違ってしまう場合があるため、”didFinishLaunchingWithOptions” に以下のように自分自身のフレームサイズを起動する端末のディスプレイサイズに再定義すると確実です。

ビューのフレームサイズをディスプレイに合わせる場合は、”viewDidLoad” に以下をセットしておきます。

参考 : iPhone5 UIImage method swizzling to load -568h images

About The Author

某IT系なんちゃってエンジニアヨーダ
Apple好きだけど盲目マカーは気持ち悪いと思ってる中道だと思い込んでるしがないダメダメエンジニア。

今もってるApple製品↓
Macbook Pro 15 inch, iMac 27 inch (Late 2009), iPhone 6 Plus, iPad (初代! いらない!)
Follow :

Leave A Reply

*

Comment On Facebook