在 App 开发中经?;嵊龅接没洗废窕蛘咛砑油计男枨蟆Mǔ?,用户可以选择拍照或者从系统相册上传两种方式。iOS 中为这个功能提供了 UIImagePickerController 这个类来实现对图片选取的功能。
第一步:实现 UIImagePickerControllerDelegate 协议
我们需要使用代理模式,扩展当前 ViewController 实现两个协议,UIImagePickerControllerDelegate 和 UINavigationControllerDelegate。
extension ViewController: UIImagePickerControllerDelegate {
// 用户选取图片之后
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// 参数 UIImagePickerControllerOriginalImage 代表选取原图片,这里使用 UIImagePickerControllerEditedImage 代表选取的是经过用户拉伸后的图片。
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
// 这里对选取的图片进行你需要的操作,通?;岬髡?ContentMode。
}
// 必须写这行,否则拍照后点击重新拍摄或使用时没有返回效果。
picker.dismiss(animated: true, completion: nil)
}
}
extension UserViewController: UINavigationControllerDelegate {
// 这里可以什么都不写
}
第二步: 定义 UIImagePickerController
在 ViewController 中定义并且设置 UIImagePickerController。通?;嵩谝桓?UIAlertView 中来定义这些操作。
下面是拍照部分的代码:
// 判断相机是否可用
if UIImagePickerController.isSourceTypeAvailable(.camera) {
let imagePicker = UIImagePickerController()
// 表示操作为拍照
imagePicker.sourceType = .camera
// 拍照后允许用户进行编辑
imagePicker.allowsEditing = true
// 也可以设置成视频
imagePicker.cameraCaptureMode = .photo
// 设置代理为 ViewController,已经实现了协议
imagePicker.delegate = self
// 进入拍照界面
self.present(imagePicker, animated: true, completion: nil)
}else {
// 照相机不可用
}
下面是从相册中选取的代码:
let imagePicker = UIImagePickerController()
// 表示操作为进入系统相册
imagePicker.sourceType = .photoLibrary
// 设置代理为 ViewController
imagePicker.delegate = self
// 允许用户编辑选择的图片
imagePicker.allowsEditing = true
// 进入系统相册界面
self.present(imagePicker, animated: true, completion: nil)
第三步:在 Info.plist 中添加权限
key: Privacy - Camera Usage Description
value: 询问用户可否调用照相机时,给用户的提示语
key: Privacy - Photo Library Usage Description
value: 询问用户可否访问系统图库时,给用的提示语