2025 年 7 月 15 日

AVKit iOS iPadOS Photos&Camera WWDC WWDC25

掌握 iOS 26 相機控制新標準:從實體按鍵到 AirPods 遠端攝影的全面進化

已複製到剪貼板


打破螢幕觸控的限制

在單手攝影或進行自拍時,僅依賴螢幕上的虛擬快門按鈕往往是開發者與使用者共同的痛點:手指觸及困難容易造成機身晃動,甚至在關鍵時刻錯失稍縱即逝的瞬間。隨著 WWDC25 的技術革新,Apple 正式將硬體按鍵提升為攝影體驗的核心。

WWDC 2025:Enhancing your camera experience with capture controls
WWDC 2025:Enhancing your camera experience with capture controls

透過 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 將如何利用這些新空間來提升攝影的藝術性?未來的創作體驗,現在已掌握在你的手中。

分享文章

已複製到剪貼板

追蹤網站

透過 Google 追蹤

超級感謝

關於 XcodeProject

XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。


Contacts

Ricky Chuang

XcodeProject

RickyChuang.xcodeproj@gmail.com

XcodeProject 聯絡

contact.xcodeproj@gmail.com

XcodeProject 的最新文章