第 13 章
打造一個以手勢控制的全螢幕相機

iOS 提供兩種讓開發者存取內建相機來照相的方式。最簡單的方式是使用 UIImagePickerViewController, 我在《iOS 15 App 程式設計實戰心法》一書中有介紹。這個類別非常方便,有內建標準的相機介面。另外可以使用 AVFoundation 來控制內建相機並擷取影像。與 UIImagePickerViewController 相比,AVFoundation 框架更複雜,但對於建立一個全客製化的相機介面來說更具彈性且強大。

在本章中,我們將會看要如何使用 AVFoundation 框架來擷取靜態圖像。你會學習到許多東西,其中包括:

  • 使用 AVFoundation 框架來建立相機介面
  • 使用前鏡頭與後鏡頭相機來擷取靜態圖像
  • 使用手勢辨識器來偵測滑動(swipe)手勢
  • 為相機 App 加入縮放功能
  • 儲存圖片至照片膠卷

AV Foundation 媒體擷取器的核心是 AVCaptureSession 物件。它控制輸入(例如後置鏡 頭相機)與輸出(例如圖片檔)間的資料流(data flow)。通常要使用 AVFoundation 框架來擷取一個靜態圖片,你需要:

  • 取得 AVCaptureDevice 實例來呈現底層的輸入裝置,例如後置鏡頭相機
  • 建立裝置的 AVCaptureDeviceInput 實例(instance)
  • 建立 AVCaptureStillImageOutput 實例來處理靜態圖片輸出
  • 使用 AVCaptureSession 來協調輸入與輸出的資料流
  • 以 session 來建立一個 AVCaptureVideoPreviewLayer 的實例來顯示相機預覽

我知道你心中會有很多問題。沒有比用真實的專案來解釋觀念更好的方式。我相信經過這個範例之後,你會對 AVFoundation 框架瞭解更加透徹。

App 範例

我們準備建立簡單的相機 App,提供全螢幕的體驗,與手勢為主的控制。這個 App 提供一個簡約版的 UI,並在畫面底部加上一個擷取按鈕。使用者可以滑動畫面來切換前後相機鏡頭。這個相機提供最大 5x 的數位變焦。使用者可以從左邊滑動畫面到右邊來放大(zoom in),或由右至左來縮小(zoom out)。

當使用者按下擷取按鈕,它以全解析度擷取照片。另外也可以讓使用者儲存至相簿。

圖 13.1. 簡單相機 App
圖 13.1. 簡單相機 App

本文摘自《iOS 17 App程式設計進階攻略》一書。如果你想繼續閱讀和下載完整程式碼,你可以從AppCoda網站購買完整電子版,全書範例檔皆可下載。

results matching ""

    No results matching ""