使用 Swift 实现上传头像

在 App 开发中经常会遇到用户上传头像或者添加图片的需求。通常,用户可以选择拍照或者从系统相册上传两种方式。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: 询问用户可否访问系统图库时,给用的提示语

你可能感兴趣的:(使用 Swift 实现上传头像)