カメラ機能を実装したい! – コタツと台所にて作るアプリ 10

お湯を一口。
今日の朝のお菓子はチョコバット3本計90円なり。
子供の頃から、この、チョコでコーティングされた硬めのパンスティックに心奪われてよく買っていたが、気づいたら発売50周年とか。
駄菓子はそれこそロングセラーが多くて、スーパーのお菓子売り場でも自分が子供の頃と変わらないパッケージのお菓子をよく見かける。
ここまで息が長いと、それこそ日本の庶民的文化の一翼を担う存在であり、いつかは文化勲章を授与するべき存在ではないかとも思えてくる。
賞が授与されるという意味で言えばモンドセレクションを受賞するという方法もあるだろう。
しかし、モンドセレクション金賞受賞の駄菓子とか、その時点で駄菓子の域を超えているだろうし、そもそも子供にモンドセレクション受賞を訴求したところで、高いと買えないわ、ねるねるねのような人工着色料バリバリのどぎついカラーリングのお菓子がすきだったりわで、まったく効果はないだろう。
と、まったく関係のない事を考えてることに気づいて、気を取り直す。
今日から一つ目の山場、カメラ機能の実装をするのだが、既に入り口で脳が現実逃避をしたがっているようだ。
頭を切り替えよう。
チョコバットを開ける。くじは・・・はずれだった。
そういえば、当たりが出たら昔は買った駄菓子屋さんにもっていけば変えてもらえたけど、今はどこに変えにいけばいいのだろうか。やはり買ったスーパーなんだろうか。しかし、それだとレシートを求められそうだけど、子供はレシートなんて持ってたりするんだろうか。それとも郵送なんだろうか。いや、今時はWebからコードを入力するのが一般的なのかもー
頭を切り替えよう。
カメラといえばAVFoundation
今まで写真撮影はUIImagePickerControllerを使っていましたが、これはAppleの標準カメラを呼び出して使う形で、画面のデザインは変えられませんでした。
今回はアプリ全体としてデザインを統一したいのと、今後カメラ機能を搭載したアプリを作る上で技術的にも習得しておきたいと思い、AVFoundationのフレームワークを使ったカメラアプリを作ることにしました。
ただこのAVFoundationは、iOSのフレームワークの中でも一二を争うほどのボリュームが大きいフレームワークだそうです。
カメラだけでなく、ビデオ、音声などもこのフレームワークを使って操作する事ができるので、大きくなるのも当然と言えば当然ですが、そんなのを全て覚えてから使うなんて到底無理な話なので、今回はカメラ機能にのみフォーカスして基本的な使い方ができればいいかなと考えていました。
そこで、まずは以下のサイト様で基本的な事項を学びました。
どうやらAVCaptureSessionが入出力を管理して、前面カメラ、背面カメラ、音声などのインプットのデバイスの指定と、動画、静止画かといったのアウトプットの指定をして、セッションを開始すればよさそうです。
土台となるソースを見つける
考え方はわかりましたが、じゃあ実際のところ実装するにはどうすればいいんでしょうか。
今回、カメラ機能として、撮影以外に以下の機能もつけたいと思っていました。
・前面、背面カメラの切替
・フラッシュのON,OFF
・焦点の指定
AVFoundationではこれらの機能も実装が可能というのは理解していましたが、そのサンプルとなるソースなしで、ゼロから作るのはなかなか辛い作業になります。
そこで土台となるようなサンプルはないか探していたところ、ありがたいことに基本的なカメラ機能を実装したサンプルを公開している方がいました。
AVFoundationで基本的なカメラの機能を実装しなおしてみた
ソースはObjective-Cですが、これをSwiftに書き換えてあげれば、カメラ機能は実装できそうです。
ということで、上記のソースをベースにカメラ機能を実装することにしました。
峠はこえられそうだが・・・
サンプルソースも見つかり、最初の峠であるカメラ機能の実装はなんとか先が見えてきました。
これはサクッと行けるんではないかと、その時は思っていたのですが、ところがどっこい。
ブロック構文という、カメラ機能よりもさらに忌避していた問題にぶつかるのでした・・・。