iPhone Duo 相機適配教學

🕒 12:592026/9/29 11:403,311 字16 張照片

本講說明如何讓相機類 App 適配 iPhone Duo:先認識雙前置攝像頭與虛擬前置攝像頭,再處理設備開合、翻轉與雙螢幕時的攝像頭方向,最後調整預覽畫面與旋轉處理。核心目標是讓使用者在任何裝置形態下,都能獲得自然、連續且方向正確的拍攝體驗。

本講重點

概念整理:雙前置攝像頭與裝置發現

0:21iPhone Duo 的相機架構從兩顆前置攝像頭開始:外屏與內屏各有一顆超廣角攝像頭,App 可透過 AVFoundation 取得影片流。

iPhone Duo 是首款同時搭載兩顆前置攝像頭的 iPhone。外屏可見一顆超廣角攝像頭,適合拍攝照片與影片;設備展開後,內屏也有一顆超廣角攝像頭,且為 iPhone 首款屏下攝像頭。既有 App 仍可透過 AVFoundation 從這些前置攝像頭採集影片流。

「虛擬前置攝像頭始終會為你的app選用最契合當前使用情景的前置鏡頭。」
1:54虛擬前置攝像頭會隨 iPhone Duo 的開合,自動在內屏與外屏的實體前置攝像頭之間切換,降低一般 App 的切換負擔。

概念整理:虛擬與物理攝像頭的取捨

虛擬前置攝像頭適合希望由系統管理鏡頭切換的情況;但若 App 要依使用情境打造更進階的體驗,或需要個別鏡頭的完整硬體能力,就可以直接使用指定的物理攝像頭。此時也要一併承擔鏡頭切換與方向處理的責任。

3:09直接使用個別物理攝像頭可取得不同的最高規格:內屏鏡頭最高為 1080p、60fps,外屏鏡頭最高可達 4K、120fps。
3:12虛擬前置攝像頭雖可自動切換鏡頭,但會讓兩顆物理攝像頭共用最高 1080p、60fps 的規格。
3:25深度資訊僅在單獨存取物理攝像頭時提供;選擇虛擬或物理攝像頭前,需先確認 App 對規格與深度功能的需求。

概念整理:為何 front 不等於正對使用者

3:55直接使用物理攝像頭時,設備開合會改變鏡頭與使用者的相對方向,App 需要利用方向協調器處理切換。

在過去的 iPhone,AVCaptureDevice 的 position 通常只區分後置 back 與前置 front。但 iPhone Duo 的內屏和外屏前置攝像頭,position 都是 front,兩者卻朝向相反。因此,front 只能表示攝像頭類別,不能保證鏡頭當下正對使用者。

4:10iPhone Duo 的內屏與外屏前置攝像頭雖都回報為 front,但因兩面螢幕方向相反,實際朝向仍須依目前視圖與設備狀態判斷。
「位置是front的攝像頭,它並不總是正對著使用者。」

概念整理:AVCaptureDeviceDirectionCoordinator

建議以 AVCaptureDeviceDirectionCoordinator 管理攝像頭朝向與開合切換。建立協調器時需要一個 UIView、要監聽的設備類型,以及狀態變更回調。回調在初始化完成後會立即執行一次,之後每逢攝像頭方向改變也會再次觸發。

5:33建立 AVCaptureDeviceDirectionCoordinator 時,需要綁定 UIView、指定要監聽的設備類型,並提供狀態變更回調。
6:43在展開並翻轉設備的情境下,後置攝像頭與外屏前置攝像頭都可能相對於外屏視圖朝前,說明方向必須以視圖所在螢幕為準。

相機類 App 可透過 Scene Accessory API 開啟雙螢幕能力,例如提詞器情境會同時擁有外屏與內屏兩個獨立 UI。每個視圖都應各自建立一個方向協調器:同一顆後置鏡頭,對外屏協調器可能是朝前,對內屏協調器則可能是朝後。

「每個協調器報告的方向都是嚴格相對於其所屬視圖所在的螢幕而言的。」

重要提醒:MainActor 與 camera actor 的安全分工

方向協調器與 UIView 深度綁定,因此被隔離在 MainActor 上。不要在方向協調器觸發的狀態變更回調裡直接呼叫 AVFoundation API,否則會混淆 UI 與相機工作執行緒的責任。

8:33方向協調器不直接傳遞 AVCaptureDevice,而是提供可安全跨執行緒傳遞的 AVCaptureDeviceDescriptor,讓 UI 與相機處理維持正確分工。

重要提醒:切換輸入後要同步處理鏡像

使用者開合設備時,方向協調器的回調會告知目前哪一顆攝像頭正對使用者。此時應在 camera actor 中重新配置 AVCaptureSession,無縫切換到正對使用者的攝像頭,並重新檢查預覽鏡像。

9:00設備開合觸發方向變更後,App 應重新配置 AVCaptureSession,改由目前正對使用者的攝像頭持續拍攝。
9:21當物理攝像頭朝前時,預覽應開啟鏡像,才能維持自然的自拍畫面。
「當物理攝像頭變為朝前方向的時候,請記得開啓預覽的鏡像,這樣才能為使用者提供一個非常自然的自拍預覽體驗。」
9:38AVCaptureDeviceDirectionCoordinator 可在 AVKit 中使用;實作細節可再參考 Apple開發者文檔的對應技術文章。

概念整理:相機預覽的版面最佳化

在 iPhone Duo 內屏以後置攝像頭完整視野取景時,預覽畫面周圍會留下額外螢幕空間。App 不一定要把預覽撐滿螢幕,而是可將這些空間轉化為更清楚的操作介面。

10:33後置攝像頭在內屏完整視野取景時,可用 AVCaptureVideoPreviewLayer 的 videoGravity 控制預覽填充方式,並善用周圍空間配置拍照控件。

使用超廣角前置攝像頭拍攝時,可發揮方形傳感器特性填滿整個螢幕。透過 AVCaptureDevice 上的動態寬高比,可在內屏輕鬆選用橫向寬高比;若要深入理解方形傳感器能力,可觀看 WWDC26 的專項影片。

10:59超廣角前置攝像頭可利用方形傳感器與 AVCaptureDevice 的動態寬高比,在內屏採用橫向畫面並更充分填滿螢幕。

重要提醒:旋轉協調與性能

除了鏡頭朝向,還要處理設備旋轉。使用 AVCaptureDeviceRotationCoordinator,可讓相機預覽與拍攝出的照片始終保持正向朝上。當 App 在 iPhone Duo 的不同螢幕間切換時,旋轉協調器會自動更新狀態,協助跨屏維持一致方向。

12:00接入旋轉協調器後,應停用前置攝像頭預設開啟的攝像頭傳感器方向補償,以兼顧跨屏方向一致性與性能。

課後複習

iPhone DuoAVFoundationAVCaptureDeviceDiscoverySession虛擬前置攝像頭.builtInOuterUltraWideCamera.builtInInnerUltraWideCameraAVCaptureDeviceDirectionCoordinatorAVCaptureDeviceDescriptorMainActorcamera actorAVCaptureSessionScene Accessory APIAVCaptureVideoPreviewLayervideoGravity動態寬高比AVCaptureDeviceRotationCoordinatoriOS 27.1

由爪爪聽寫圖文報告生成AI 生成