一、介紹
圖片選擇或者拍照功能:
1、選擇相冊中的圖片或是拍照,都是通過UIImagePickerController控制器實例化一個對象,然后通過self.presentViewController方法推出界面顯示。但是使用presentViewController的類需要實現UIImagePickerControllerDelegate、UINavigationController兩個代理。
2、UIImagePickerController可以通過isSourceTypeAvailable方法來判斷設備是否支持照相機/圖片庫/相冊功能。如果支持,可以通過sourceType屬性來設置圖片控制器的顯示類型。類型一共分為3種:PhotoLibrary(照片庫)、Camera(相機)、SavedPhotoAlbum(相冊)
3、實現協議截圖
二、實例
1、使用相冊選擇步驟:
- 判斷是否支持要使用的圖片庫或相冊功能
- 初始化圖片控制器對象
- 指定圖片控制器對象的代理
- 指定圖片控制器的類型,前提是必須先導入MobileCoreServices.framework框架
- 彈出顯示圖片控制器
- 實現圖片控制住器代理方法
func chooseImageFromAlbum(){ //判斷是否支持要使用的圖片庫 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //初始化圖片控制器 let picker = UIImagePickerController() //設置代理 picker.delegate = self //設置媒體類型 picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String] //設置允許編輯 picker.allowsEditing = true //指定圖片控制器類型 picker.sourceType = .photoLibrary //彈出控制器,顯示界面 self.present(picker, animated: true, completion: nil) } else{ let alert = UIAlertView.init(title: "讀取相冊錯誤!", message: nil, delegate: nil, cancelButtonTitle: "確定") alert.show() } } //實現圖片控制器代理方法 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { //查看info對象 print(info) //獲取選擇的原圖 let originImage = info[UIImagePickerControllerOriginalImage] as! UIImage //賦值,圖片視圖顯示圖片 self.pickerView.image = originImage //圖片控制器退出 picker.dismiss(animated: true, completion: nil) } //取消圖片控制器代理 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { //圖片控制器退出 picker.dismiss(animated: true, completion: nil) }
2、拍照步驟:
- 判斷是否支持拍照功能
- 初始化圖片控制器對象(可以設置是否允許編輯)
- 指定圖片控制器對象的代理
- 指定圖片控制器的類型
- 彈出顯示圖片控制器
func takePhotoFromCamera() { //判斷是否支持相機 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //初始化圖片控制器 let picker = UIImagePickerController() //設置代理 picker.delegate = self //設置媒體類型 picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String] //設置來源 picker.sourceType = UIImagePickerControllerSourceType.camera //設置鏡頭 front:前置攝像頭 Rear:后置攝像頭 if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.front) { picker.cameraDevice = UIImagePickerControllerCameraDevice.front } //設置閃光燈(On:開、Off:關、Auto:自動) picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.on //允許編輯 picker.allowsEditing = true //打開相機 self.present(picker, animated: true, completion: nil) } else{ let alert = UIAlertView.init(title: "找不到相機!", message: nil, delegate: nil, cancelButtonTitle: "確定") alert.show() } }