📷

【iOS】iPhoneのカメラをシームレスに切り替える

2023/05/17に公開

iOSにプリインストールされているカメラアプリのように、超広角レンズカメラ、広角レンズカメラ、望遠レンズカメラと、カメラ映像をシームレスに切り替える方法について書きます。

実装方法

.builtInTripleCamera.builtInDualWideCamera.builtInDualCameraAVCaptureDeviceInput オブジェクトを作成し、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をご参照ください。
https://developer.apple.com/documentation/avfoundation/avcapturedevice/devicetype/3377621-builtintriplecamera

https://developer.apple.com/documentation/avfoundation/avcapturedevice/devicetype/3377620-builtindualwidecamera

https://developer.apple.com/documentation/avfoundation/avcapturedevice/devicetype/2727142-builtindualcamera

Discussion