swift3.0之UIImagePickerController的使用和注意事项

来源:互联网 发布:python 字典是什么 编辑:程序博客网 时间:2024/05/16 12:46

在oc中使用UIImagePickerController只要设置好代理、写代理方法就行了,但是在swift中编译没有什么问题,但是运行的时候会报错,选择一张图片,会显示库是私有的,不能访问,遇到这样的问题很好的解决办法就是在info.plist文件中添加Privacy - Photo Library Usage Description 和 Privacy - Camera Usage Description 两个字符串属性

下面是代码片段

1.在类中设置代理方法

UIImagePickerControllerDelegate,UINavigationControllerDelegate


2.UIImagePickerController对象的创建

 lazy var imagePicker: UIImagePickerController = {        let imgPicker = UIImagePickerController()       imgPicker.modalPresentationStyle = UIModalPresentationStyle.fullScreen        imgPicker.allowsEditing = true        imgPicker.delegate = self         return imgPicker    }()

3.图片获取的选择模式,以及UIImagePickerController的代理方法实现

func selectHeadImageFromCamera() {                let alertVC = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)                let cancelAction = UIAlertAction(title: "取消", style: .default) { (action) in                                }                       weak var weakSelf = self        let cameralAction = UIAlertAction(title: "拍照", style: .default) { (action) in                        weakSelf?.clickedButtonAtIndex(index: 0)        }                let pictureAction = UIAlertAction(title: "相册", style: .default) { (action) in                         weakSelf?.clickedButtonAtIndex(index: 1)        }                alertVC.addAction(cameralAction)        alertVC.addAction(pictureAction)        alertVC.addAction(cancelAction)                self.present(alertVC, animated: true, completion: nil)            }        //#pram mark --UIImagePickerControllerDelegate        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {                self.hideHud()        self.showHud(in: self.view, hint: "上传中...")        let image:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage        picker.dismiss(animated: true, completion: nil)                if image != nil {                         self.updateUserHeadPortrait(image: image)        }        else        {            self.hideHud()            self.showHint("上传失败")        }            }        func updateUserHeadPortrait(image:UIImage){                      let newImage = self.imageWithImage(image: image, scaleToSize: CGSize(width: 150.0, height: 150.0))        weak var weakSelf = self        if newImage != nil {            weak var weakSelf = self            NetService.apiUpdateUserHeadPortait(newImage, success: { (success) in                                weakSelf?.imageView?.image = newImage                ManagerTool.shared.currentUserInfo.babyHeadPortrait = success                weakSelf?.hideHud()                weakSelf?.showHint("上传成功")                            }, failure: { (failure) in                weakSelf?.hideHud()                weakSelf?.showHint("上传失败")            })        }    }        func imageWithImage(image:UIImage,scaleToSize:CGSize) -> UIImage {                UIGraphicsBeginImageContext(scaleToSize)        image.draw(in: CGRect(x: 0, y: 0, width: scaleToSize.width, height: scaleToSize.height))        let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!        UIGraphicsEndImageContext()                return newImage    }            func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {                self.imagePicker.dismiss(animated: true, completion: nil)    }        func clickedButtonAtIndex(index:Int) {                        if index == 0        {            print("\(index)")                       if Platform.isSimulator            {                self.hideHud()                self.showHint("模拟器不支持拍照功能")            }            else            {                if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){                    self.imagePicker.sourceType = UIImagePickerControllerSourceType.camera                                        if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.front){                        self.imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front                    }                    self.imagePicker.mediaTypes = [kUTTypeImage as String]                    self.present(self.imagePicker, animated: true, completion: nil)                }            }        }        else if index == 1{                        self.imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary            self.imagePicker.mediaTypes = [kUTTypeImage as String];            self.present(self.imagePicker, animated: true, completion: nil)        }            }