使用 UIImagePickerController 來選取使用者拍攝的照片、影片或已存在相簿的照片

UIImagePickerController 是什麼?它是一個可用選取使用者拍攝的照片或影片、已存在相簿的照片等等的元件,這是一個再常用不過的元件了,那代表著得必須投資一點時間來學習它囉。

法蘭克的 iOS 世界
5 min readJan 9, 2017

UIImagePickerController 有三種 Types 可設定,此三種型態分別用來代表要從 相機(UIImagePickerController.SourceType.camera)、圖庫(UIImagePickerController.SourceType.photoLibrary)、相簿(UIImagePickerController.SourceType.savedPhotosAlbum)來選擇圖片。設定完 Types,利用 present(_:animated:completion:) 的方式呈現,不過,不同的 Types 呼叫的方式都一致,但 ModalPresentationStyle 確不一樣(見表1)。

表1

其還有兩個很重要的 Delegates,分別是 UIImagePickerControllerDelegate(處理選取完照片後的function)UINavigationControllerDelegate(開啟相機或照片選取時畫面跳轉時所必要)。總而言之,UIImagePickerController 最重要的部分包其 Source Type 還有得必須遵守的 Delegates,對其有初步的認識後,開始手把手來寫寫 Demo 吧😀

畫面很簡單(圖1),瑩幕正中間有一個 UIImageView,點擊它 Present 一個 AlertController,其有三個 Actions,分別為相機、照片、相簿,依點擊的 Action 各別設定 UIImagePickerController.SourceType後 Present。

圖1

畫面建置

▼在 Main.storyboard 加入 UIImageView,並設定其 Constraints

▼勾選 UIImageView 的 User Interaction Enable

▼設置 UIImageView 的 IBOutlet

▼在 UIImageView 加入 Tap Gesture,並 Insert 其 IBAction

功能撰寫

▼宣告 UIImagePickerController 並在 ViewDidLoad 裡遵從其 Delegate

▼實作 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate

UIImagePickerControllerDelegate:用來處理選取完照片後的 function,其來源的型態有很多種,此 Demo 使用的是 origin image,另還有很多類型供選擇(圖2)。

UINavigationControllerDelegate:開啟相機或照片選取時畫面跳轉時用。

圖2

▼在 IBAction 裡撰寫 UIAlertController,其包含相機、照片、相簿的 Actions

第 33、39、45 行各代表著從相機、圖庫、相簿選取照片的行為,其 Present 的方式都是一致的,但 ModalPresentationStyle 確是不一樣的,相機為 Fullscreen;圖庫和相簿則為 Popover,此處呼應表1。

隱私權描述

在 iOS10 之後,要存取使用者私密資料的話,都必須在 info.plist 裡必須加入使用相機和照片的描述,否則在開啟此 App 時是會有 Crash(圖3) 的狀況,簿和使用相機的描述。描述的部份則依 App 需求打入即可,不一定要按照法蘭克所打的。

圖3

▼在 info.plist 裡加入使用相機和存取相簿的描述

以上已完成。但相機只能用真機測試,而圖庫和相簿用真機或模擬器都可以測試。iPad 和 iPhone 的圖庫和相簿的介面是不一樣的,直接上圖。

如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您。

--

--