2025 年 7 月 15 日
AVKit iOS iPadOS Photos&Camera WWDC WWDC25掌握 iOS 26 相機控制新標準:從實體按鍵到 AirPods 遠端攝影的全面進化
打破螢幕觸控的限制
在單手攝影或進行自拍時,僅依賴螢幕上的虛擬快門按鈕往往是開發者與使用者共同的痛點:手指觸及困難容易造成機身晃動,甚至在關鍵時刻錯失稍縱即逝的瞬間。隨著 WWDC25 的技術革新,Apple 正式將硬體按鍵提升為攝影體驗的核心。
透過 AVCaptureEventInteraction API 與全新的 Capture Controls,開發者能將 iPhone 上的實體按鍵轉化為觸感精確的控制工具。這不僅是軟體功能的延伸,更是硬體與軟體協同作用(Hardware-Software Synergy)的完美體現。本文將從開發者視角出發,解析這場從 iPhone 實體按鍵到 AirPods 遠端攝影的技術進化。
核心機制:AVCaptureEventInteraction 深度解析
AVCaptureEventInteraction 是這場交互革命的核心 API。它允許開發者覆寫實體按鍵(如音量鍵、動作按鈕、iPhone 16 相機控制鍵)的預設系統行為,將其轉化為自定義的攝影指令。
技術重點:事件相位 Event Phases
精確的攝影體驗取決於對按鍵生命週期的精確控制。系統將一個按鍵動作拆解為三個階段:
- 準備階段
.began:使用者按下按鍵的瞬間。這是「預熱」相機物件、準備拍照輸出或鎖定對焦的最佳時機,能有效縮短快門延遲 - 中斷階段
.cancelled:當 App 進入背景或相機功能變得不可用時觸發。開發者應在此階段清理暫存狀態,確保系統穩定性 - 觸發階段
.ended:使用者放開按鍵的時刻。這是執行快門拍照或啟動錄影的標準觸發點
主要 Primary 與次要 Secondary 操作
API 提供了按鍵行為的模組化區分:
- Primary Action:由音量減鍵、動作按鈕(Action button)與 iPhone 16 相機控制鍵觸發
- Secondary Action:專屬於音量加鍵。若開發者未定義次要操作,音量加鍵會自動映射至主要操作
採用此 API 會覆寫系統預設行為,因此 App 必須始終對接收到的事件做出適當回應。若未能處理事件,將導致按鍵失效,造成負面的使用者體驗。
SwiftUI 實作:只需 6 行程式碼的魔法
在 SwiftUI 中,Apple 透過 onCameraCaptureEvent View Modifier 簡化了實作過程。要讓 App 獲得與系統相機同等的按鍵手感,開發者只需確保在正確的相位觸發邏輯。
實作範例
請注意,實作前必須導入 AVKit 框架,並建議在 .began 階段進行相機預熱:
import AVKit // 必須導入
CameraView()
.onCameraCaptureEvent { event in
if event.phase == .began {
// 預熱相機物件,縮短快門反應時間
} else if event.phase == .ended {
cameraModel.takePhoto() // 於放開按鍵時觸發拍照
}
}
透過這短短 6 行邏輯,第三方應用即可實現與原生相機完全一致的實體快門體驗。
iOS 26 重磅更新:AirPods 遠端攝影控制
在 iOS 26 中,攝影交互延伸到了穿戴式裝置。搭載 H2 晶片 的 AirPods(如 AirPods Pro)現在支援透過耳機柄點擊進行「遠端攝影」,讓使用者在遠離手機時也能輕鬆創作。
聲音回饋與系統權限
由於遠端攝影時使用者通常未直視螢幕,聲音回饋成為確認拍攝成功的關鍵。
shouldPlaySound屬性:這是一個唯讀屬性。系統會自動判斷觸發源,僅當事件是由 AirPods 點擊產生時,此值才會為true- 音效自定義:若 App 有獨特的聲學品牌設計,開發者可透過
defaultSoundDisabled參數關閉系統預設音,並調用event.playSound(.cameraShutter)播放自定義快門聲
開發者可在系統設定的「遠端相機拍攝 Remote Camera Capture」中配置 AirPods 的觸發方式(點擊一次或兩次)。
iPhone 16 專屬:Camera Control 硬體整合
iPhone 16 的相機控制按鍵不僅是快門,更是功能豐富的硬體撥盤。
啟動與 Lock Screen 擴充
若要支援「點擊啟動 Launch」功能,開發者必須建立 Lock Screen Capture Extension。這能確保在裝置鎖定狀態下,使用者仍能透過按鍵立即進入攝影模式。
交互層次:Light Press 的魔法
iPhone 16 支援「輕壓 Light Press」手勢:
- 單次輕壓:啟動「乾淨預覽 Clean Preview」,暫時隱藏 UI 以專注構圖
- 雙次輕壓:喚出設定菜單,透過滑動切換不同的控制項
控制類型對比
| 控制類型 | 類別 | 特性 | 應用範例 |
| 連續型滑桿 | AVCaptureSlider |
在指定範圍內選取任意數值 | 變焦 Zoom |
| 離散型滑桿 | AVCaptureSlider |
依固定步長選取數值 | 曝光補償(Exposure Bias,1/3 步長) |
| 選擇器 | AVCapturePicker |
索引型狀態切換 | 濾鏡選擇、閃光燈模式(On/Off) |
同步機制:KVO 與 Action Handlers
- 系統預設控制(如
AVCaptureSystemZoomControl):會自動驅動硬體屬性。若 App 已使用 KVO 監聽videoZoomFactor,UI 會自動更新 - 自定義控制:在建立時提供 Action Handler。系統會在 主執行緒(Main Thread)觸發該處理器,方便直接更新 UI;若需同步驅動攝影設定,則建議將 Action 導向特定的 Session Queue
// 建立系統 Zoom Control 範例
let zoomControl = AVCaptureSystemZoomSlider(device: videoDevice) { newZoomFactor in
// Action Handler 在主執行緒運行,適合即時更新 UI 狀態
self.label.text = String(format: "%.1fx", newZoomFactor)
}
if captureSession.canAddControl(zoomControl) {
captureSession.addControl(zoomControl)
}
最佳實踐與限制
- 僅限攝影用途:系統僅會在
AVCaptureSession活躍時發送事件。嚴禁在非相機應用中為了獲取按鍵權限而執行相機 Session,這涉及隱私與電力消耗 - 數量與冗餘限制:開發者應透過
maxControlsCount檢查上限。此外,嚴禁為同一個設備重複添加系統變焦控制項,否則canAddControl將返回false - 狀態處理:當功能(如濾鏡)在特定模式下不適用時,應將控制項設為「禁用 Disabled」而非直接從介面移除,以避免選單跳動導致使用者困惑
定義未來的攝影交互
透過 AVCaptureEventInteraction 到 AirPods 遠端攝影的全面整合,Apple 正在將 iPhone 轉變為一台兼具觸感與專業度的攝影設備。對於開發者而言,這不僅是 API 的更新,更是重新想像使用者創作流程的機會。
當遠端操作與硬體撥盤變得如此無縫且直覺時,你的 App 將如何利用這些新空間來提升攝影的藝術性?未來的創作體驗,現在已掌握在你的手中。
關於 XcodeProject
XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。