この記事ではAVFoundationを使って、カスタムカメラを実装する際のフラッシュの実装のTipsを2つ紹介します。
確認した環境
iOS11
1. supportedFlashModes
の確認
iOS端末の中にはフラッシュ機能がないカメラが存在するため、その考慮が必要です。
具体的にはインカメラや一部のiPadのアウトカメラです。
フラッシュ機能がないカメラでフラッシュが on
or auto
で AVCapturePhotoOutput
の capturePhoto
メソッドを呼ぶとクラッシュします。
対応方法
AVCapturePhotoOutput
の supportedFlashModes
でサポートされているフラッシュモードが確認できるため、サポートされているフラッシュモードのみ設定するようにします。
2. 端末が高温で使えない場合の考慮
iOS端末は高温になるとフラッシュ機能が使えなくなります。
標準のカメラアプリでも使用できなくなり、以下のような表示になります。
Appleのドキュメントにもそのような記載があります。
対応方法
AVCaptureDevice
の isFlashAvailable
でフラッシュが使えるか確認できるため、この値を監視することになります。
私のケースでは対応する必要がなかったため実装はしていないのですが、 この値を変更を受け取るDelegateメソッド等は用意されていないようなので、KVOで監視することになると思います。
このケースでフラッシュが使えない状況で、フラッシュが on
or auto
で AVCapturePhotoOutput
の capturePhoto
メソッドを呼んでも、 1. とは違い、クラッシュしませんでした。