Swift Playgroundsで学ぶiOSプログラミング

内蔵カメラを使ったカメラアプリを作る

文●柴田文彦 編集●吉田ヒロ

2017年11月06日 17時00分

イメージビューを用意して、撮影した写真を取り込む

 イメージピッカーは、独立したビューコントローラーとして動作するようになっているものの、それだけでは構図を決めるファインダー表示や、撮影のための最小限のユーザーインターフェースが使えるだけです。撮影した画像の表示や、それを保存するといった機能を実現するには、別のビューやそのビューコントローラーが必要です。ということは、iOSのナビゲーション機能を利用して複数のビューコントローラーを切り替えることが必要となることを意味しています。イメージピッカーは、当然それを前提に設計されています。ナビゲーション機能によって切り替えられるビューコントローラーの1つとして写真を撮影し、その結果は別のビューコントローラーに渡して表示したりしてもらうことになるのです。

 そこで、一般的なビューコントローラーの中に、まず撮影結果の写真を表示するためのビューを用意し、そこからイメージピッカーに切り替えて写真を撮影したら、元のビューコントローラーに戻って、結果を表示するというプログラムを考えます。この最初のビューコントローラーは、イメージピッカーから画像を受け取るために、イメージピッカーのデリゲート(UIImagePickerControllerDelegate)とし、同時にナビゲーション機能を利用するために、ナビゲーションコントローラーのデリゲート(UINavigationControllerDelegate)にもなります。

撮影した写真をとりあえず表示して確認できるようにするため、新たなビューコントローラーを導入します。その中でイメージピッカーを作成して、そこにナビゲーション機能で切り替えるプログラムになります。この前にUIKitとPlaygroundSupportのインポートが、この後にはこのビューコントローラーのオブジェクトを作成してライブビューに設定するコードがあります

 そのコントローラーのviewDidLoadメソッドの中では、受け取った画像を画面に表示するためのイメージビュー(UIImageView)をセットアップしてから、イメージピッカーのオブジェクトを作成します。その際、実際にカメラが利用可能かどうか念のために調べています。イメージピッカーを準備したら、ナビゲーション機能を利用して、いきなりそこに切り替えます。つまりユーザーが最初に目にするのはイメージピッカーの写真撮影画面ということになります。

 写真の撮影が完了すると、イメージピッカーは、そのデリゲートのdidFinishPickingMediaWithInfoというメソッドを呼び出します。その中では、撮影した画像を受け取り、それをビューのimageにセットしてから、表示を元のビューコントローラーに切り替えます。これで撮影した写真がビューコントローラーの画面いっぱいに表示され、確認できるわけです。

 このプログラムを実際に動かしてみると、まず前の最小限のプログラムと同様のカメラ画面が表示されます。

プログラムを動かすと、前の例で示したものとまったく同じカメラ画面が表示されます。左側のプログラム画面の最下部には、前の図に表示されていなかったビューコントローラーのオブジェクト作成とそれをライブビューに設定するコードが見えています

 ファインダーのビューを見ながら構図を決めたらシャッターボタンをタップして撮影しましょう。すると、シャッターの左右のボタンのタイトルが、左は「キャンセル」から「再撮影」に、右はフロントとリアの切り替えから「写真を使用」に変わります。

シャッターボタンをタップして撮影が完了すると、シャッターボタンはいったん消えますが、それが元あった位置の左右には「再撮影」と「写真を使用」というボタンが表示されます。「写真を使用」をタップすると、今まで表示されていなかった元のビューコントローラーに戻ります

 ここで「写真を使用」をタップすると、元のビューコントローラーに戻って、撮影した写真が表示されます。

元のビューコントローラーは、イメージピッカーから受け取った画像を画面いっぱい(この場合はプレイグラウンドの右半分)に表示します。今回はここまでで、表示した画像をどうにかすることはまだできません

次回の予定

 今回のプログラムでは、かなりミニマムなコードによって、iPadの内蔵カメラを利用して撮影した写真を表示するところまではできました。しかし、それを加工したり、保存したりすることはできません。次回以降、徐々に機能を追加して、ある程度実用的なカメラアプリを作っていくつもりです。もちろんiOSには標準のカメラアプリがあるので、あまり便利なプログラムにはなりませんが、iOSの中でのカメラや画像の扱いについては理解が深まるはずです。

mobileASCII.jp TOPページへ

mobile ASCII

Access Rankingアクセスランキング