【iOS】iPhoneのカメラをシームレスに切り替える
iOSにプリインストールされているカメラアプリのように、超広角レンズカメラ、広角レンズカメラ、望遠レンズカメラと、カメラ映像をシームレスに切り替える方法について書きます。
実装方法
.builtInTripleCamera
、 .builtInDualWideCamera
、 .builtInDualCamera
でAVCaptureDeviceInput
オブジェクトを作成し、AVCaptureSession
オブジェクトにaddInput
することで実現することができます。
iPhone 14 Proのような、超広角レンズカメラ、広角レンズカメラ、望遠レンズカメラを備えたデバイスには、.builtInTripleCamera
を、iPhone 13 miniのような、超広角レンズカメラ、広角レンズカメラを備えたデバイスには、.builtInDualWideCamera
を、iPhone Xのような広角レンズカメラ、望遠レンズカメラを備えたデバイスには、.builtInDualCamera
を使用します。
ズーム倍率
.builtInWideAngleCamera
(広角レンズカメラ)を使用している時は、AVCaptureDevice
オブジェクトのvideoZoomFactor
に1.0をセットすると、ズーム倍率が1.0倍、10.0をセットすると、ズーム倍率が10.0倍になりました。
.builtInTripleCamera
、 .builtInDualWideCamera
を使用する時は、設定するズーム倍率には注意が必要です。
videoZoomFactor
に1.0をセットすると、ズーム倍率が0.5倍、つまり超広角レンズカメラの映像が表示され、2.0をセットすると、ズーム倍率が1.0倍、つまり広角レンズカメラの映像が表示されるようになります。
つまり、videoZoomFactor
に1.0 ~ 1.9をセットしている時は、超広角レンズカメラの映像が表示され、2.0をセットした瞬間に、自動で広角レンズカメラの映像が表示されます。
カメラ映像が切り替わるズーム倍率
AVCaptureDevice
クラスのvirtualDeviceSwitchOverVideoZoomFactors
にカメラ映像が切り替わるズーム倍率の配列が格納されています。
例えば、iPhone 14 Pro では[2, 6]を取得することができます。つまり、.builtInTripleCamera
を使用している時、videoZoomFactor
に2.0をセットすると、広角レンズカメラの映像が、6.0をセットすると、望遠レンズカメラの映像が表示されるということになります。
上記は、iPhone 13 miniでサンプルソースを動かした時のスクリーンショットキャプチャです。virtualDeviceSwitchOverVideoZoomFactors
には「2」が格納されており、ズーム倍率が2.0倍になった瞬間、超広角レンズカメラから広角レンズカメラの映像に切り替わっていることを確認することができます。
補足事項
望遠レンズカメラに切り替わるズーム倍率
望遠レンズカメラに切り替わるズーム倍率は、iPhoneの種類によって異なります。例えば、iPhone 14 Pro では、virtualDeviceSwitchOverVideoZoomFactors
に[2、6]が格納されていますが、iPhone 12 Pro では、[2、4]が格納されています。
カメラが切り替わる条件
フォーカス位置や光量によって、自動でカメラ映像が切り替わらないことがあります。
詳しい条件は以下のDiscussionをご参照ください。
Discussion