使用 UIImagePickerController 來選取使用者拍攝的照片、影片或已存在相簿的照片
UIImagePickerController 是什麼?它是一個可用選取使用者拍攝的照片或影片、已存在相簿的照片等等的元件,這是一個再常用不過的元件了,那代表著得必須投資一點時間來學習它囉。
UIImagePickerController 有三種 Types 可設定,此三種型態分別用來代表要從 相機(UIImagePickerController.SourceType.camera)、圖庫(UIImagePickerController.SourceType.photoLibrary)、相簿(UIImagePickerController.SourceType.savedPhotosAlbum)
來選擇圖片。設定完 Types,利用 present(_:animated:completion:) 的方式呈現,不過,不同的 Types 呼叫的方式都一致,但 ModalPresentationStyle 確不一樣(見表1)。
其還有兩個很重要的 Delegates,分別是 UIImagePickerControllerDelegate(處理選取完照片後的function)
和 UINavigationControllerDelegate(開啟相機或照片選取時畫面跳轉時所必要)
。總而言之,UIImagePickerController 最重要的部分包其 Source Type 還有得必須遵守的 Delegates,對其有初步的認識後,開始手把手來寫寫 Demo 吧😀
畫面很簡單(圖1),瑩幕正中間有一個 UIImageView,點擊它 Present 一個 AlertController,其有三個 Actions,分別為相機、照片、相簿,依點擊的 Action 各別設定 UIImagePickerController.SourceType
後 Present。
畫面建置
▼在 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:開啟相機或照片選取時畫面跳轉時用。
▼在 IBAction 裡撰寫 UIAlertController,其包含相機、照片、相簿的 Actions
第 33、39、45 行各代表著從相機、圖庫、相簿選取照片的行為,其 Present 的方式都是一致的,但 ModalPresentationStyle 確是不一樣的,相機為 Fullscreen
;圖庫和相簿則為 Popover
,此處呼應表1。
隱私權描述
在 iOS10 之後,要存取使用者私密資料的話,都必須在 info.plist 裡必須加入使用相機和照片的描述,否則在開啟此 App 時是會有 Crash(圖3) 的狀況,簿和使用相機的描述。描述的部份則依 App 需求打入即可,不一定要按照法蘭克所打的。
▼在 info.plist 裡加入使用相機和存取相簿的描述
以上已完成。但相機只能用真機測試,而圖庫和相簿用真機或模擬器都可以測試。iPad 和 iPhone 的圖庫和相簿的介面是不一樣的,直接上圖。
如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您。