App: 2010年7月アーカイブ

 iOSでは写真アルバムからの画像を選び出す手段としてイメージピッカー UIImagePickerControllerクラスを提供しています。

 iPad上では,これをPopoverというUIで使用しなさいという条件が付いています。ボタンを押すと現れる吹き出しのようなインターフェイスがPopoverです。

 Popoverの横幅は320ピクセルとされていて,これはiPhoneの横幅と同じなので,テーブルビューなどをそのまま持ってきてPopover内に表示することができます。Popover内がiPhoneアプリのように見えるのも当然です。

--

 ところで,イメージピッカーで写真を選択する場合,範囲選択の編集をさせることができます。allowsEditingプロパティをYESにすれば,選択後に拡大縮小と範囲を移動させる画面が用意されます。

 そして,ピックアップした画像をおさめたNSDictionary型からUIImagePickerControllerEditedImageをキーとして編集結果を取り出すという手順になります。ちなみに,UIImagePickerControllerOriginalImageをキーにすると編集されてないオリジナル画像が取り出せます。

 ところが,この方法を素朴に採用すると横幅最大320ピクセルの画像しか取り出せず,それを拡大するとぼやけてしまいます。

 というのもイメージピッカーがPopoverの中でしか使えないためです。Popoverの大きさを拡大すれば,原理的にはイメージピッカーの切り抜きサイズも大きくなるはずですが,残念ながらPopoverは,縦方向はともかく,横方向は320ピクセルに制限されているため,数値を大きく指定して引き伸ばしてもすぐに幅320ピクセルへ縮んでしまいます。

--

 iPadでイメージピッカーを使用して,大きなサイズの画像を切り抜けないのかというと,そうでもありません。

 幸い,イメージピッカーはオリジナル画像とともに切り抜こうとした矩形範囲の座標をUIImagePickerControllerCropRectキーで教えてくれるのです。

 であれば,こちらでオリジナル画像を切り抜けば良いだけのこと。画像の切り抜き方法は,ググるとあれこれ出てきますので,それを参考にしましょう。

 ところが,うまく切り抜いてアプリも動いているにもかかわらず,処理を繰り返していると頻繁に「落ちる」。メディアを自在に閲覧できるiPadがどうして?と訝しく思えるのですが,どうも画像を保持するUIImageViewでは1024ピクセル以上の画像を扱わないで欲しいらしい。かなりメモリにシビアなのが現状です。

 というわけで,切り抜いた画像を1024ピクセル以内にリサイズすることにして,やっと問題が解消しそうです。

 新しいアプリの開発を始めて,iPadとiPhoneのユニバーサルアプリを勉強しています。Appleの「iPadプログラミングガイド」や『iPadプログラミングの作法』などが参考になります。

 ユニバーサルアプリのメリットはそれほど大きくありません。iPadとiPhoneの個別修正があった場合,変更無い方も一緒に更新作業が必要になる煩雑さがユーザーにはあるかもしれませんし,有料アプリの場合には価格設定を分けられないというのも困るかもしれません。

 開発の手間も減るわけではありませんが,配信手続きが一回で済む点は便利かなと思います。なにしろ,あのAppStoreですから,願わくはシンプルに済ませたいものです。

--

 現時点で,ユニバーサルアプリの開発は,iPhone OS3.2(iPad)とiOS4(iPhone)というメジャーバージョンの異なるOSを想定して作業することになります。

 iOS4からマルチタスクやアプリ切り替え機能が追加されたので,アプリのコア設計も変わってしまっています。その上,iPadとiPhoneは画面解像度が違いますから,UIデザインは二重作業です。

 ところでiPhone3G(S)からiPhone4では解像度が縦横2倍に変わりましたが,この場合のグラフィック処理も2倍で考えるのかと思っていましたが,実はiPhone4においてもプログラミング段階では320x480という座標値でプログラムを作ることになります。

 iPhone4ではそれが高解像度に自動変換されるということが売りのようです。ただし,アプリ内で使用する画像ファイルなどは,2倍の大きさで作り込んでおかないと,低解像度がそのまま引き延ばされた格好になるので見栄えしないというわけです。

 というわけで,新しいiOSでは,プログラミングの手間が増えるというよりも,グラフィック素材の準備に手間がかかるようになっています。どちらかといえば絵心が無くてプログラミングをしているような人間には,悩ましさが増している今日この頃です。