イメージビューを用意して、撮影した写真を取り込む
イメージピッカーは、独立したビューコントローラーとして動作するようになっているものの、それだけでは構図を決めるファインダー表示や、撮影のための最小限のユーザーインターフェースが使えるだけです。撮影した画像の表示や、それを保存するといった機能を実現するには、別のビューやそのビューコントローラーが必要です。ということは、iOSのナビゲーション機能を利用して複数のビューコントローラーを切り替えることが必要となることを意味しています。イメージピッカーは、当然それを前提に設計されています。ナビゲーション機能によって切り替えられるビューコントローラーの1つとして写真を撮影し、その結果は別のビューコントローラーに渡して表示したりしてもらうことになるのです。
そこで、一般的なビューコントローラーの中に、まず撮影結果の写真を表示するためのビューを用意し、そこからイメージピッカーに切り替えて写真を撮影したら、元のビューコントローラーに戻って、結果を表示するというプログラムを考えます。この最初のビューコントローラーは、イメージピッカーから画像を受け取るために、イメージピッカーのデリゲート(UIImagePickerControllerDelegate)とし、同時にナビゲーション機能を利用するために、ナビゲーションコントローラーのデリゲート(UINavigationControllerDelegate)にもなります。
そのコントローラーのviewDidLoadメソッドの中では、受け取った画像を画面に表示するためのイメージビュー(UIImageView)をセットアップしてから、イメージピッカーのオブジェクトを作成します。その際、実際にカメラが利用可能かどうか念のために調べています。イメージピッカーを準備したら、ナビゲーション機能を利用して、いきなりそこに切り替えます。つまりユーザーが最初に目にするのはイメージピッカーの写真撮影画面ということになります。
写真の撮影が完了すると、イメージピッカーは、そのデリゲートのdidFinishPickingMediaWithInfoというメソッドを呼び出します。その中では、撮影した画像を受け取り、それをビューのimageにセットしてから、表示を元のビューコントローラーに切り替えます。これで撮影した写真がビューコントローラーの画面いっぱいに表示され、確認できるわけです。
このプログラムを実際に動かしてみると、まず前の最小限のプログラムと同様のカメラ画面が表示されます。
ファインダーのビューを見ながら構図を決めたらシャッターボタンをタップして撮影しましょう。すると、シャッターの左右のボタンのタイトルが、左は「キャンセル」から「再撮影」に、右はフロントとリアの切り替えから「写真を使用」に変わります。
ここで「写真を使用」をタップすると、元のビューコントローラーに戻って、撮影した写真が表示されます。
次回の予定
今回のプログラムでは、かなりミニマムなコードによって、iPadの内蔵カメラを利用して撮影した写真を表示するところまではできました。しかし、それを加工したり、保存したりすることはできません。次回以降、徐々に機能を追加して、ある程度実用的なカメラアプリを作っていくつもりです。もちろんiOSには標準のカメラアプリがあるので、あまり便利なプログラムにはなりませんが、iOSの中でのカメラや画像の扱いについては理解が深まるはずです。