#77 搭配 UIImagePickerController 選相簿照片或拍照
功能需求:
參考通訊錄 App,從相簿選照片或拍照,修改 App 畫面上的照片。
1 使用 UIAlertController 選擇照片來源。
(1) 從相簿選。
(2) 拍照。
ps: 可用 UIImagePickerController.isSourceTypeAvailable 判斷是否支援相簿或拍照。
2 使用 UIImagePickerController 從相簿選照片或拍照。
值得注意的,拍照只能在實機,無法在模擬器測試。如果想拍照,請記得在 App Info 頁面的 Privacy — Camera Usage Description 設定請求權限的文字。
提示
(1) UIImagePickerController 的 sourceType 控制從相簿選照片或拍照。
(2) 設定 UIImagePickerController 的 delegate。
比方將 ViewController 設為 UIImagePickerController 的 delegate ,程式如下。
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func selectPhoto() {
let controller = UIImagePickerController()
controller.sourceType = .photoLibrary
controller.delegate = self
}
}
因為 delegate 的型別如下,所以 ViewController 要同時遵從 protocol UIImagePickerControllerDelegate & UINavigationControllerDelegate。
weak open var delegate: (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
(3) 當使用者拍照或選照片後,將呼叫 UIImagePickerControllerDelegate 的 function imagePickerController(_:didFinishPickingMediaWithInfo:)。
我們可從參數 info 取得圖片相關資料。info 的型別是 dictionary,傳入 key .originalImage 可得到圖片。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[.originalImage] as? UIImage
}