在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,completion: nil)
}
}
}
else if index == 1{
self.imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
self.imagePicker.mediaTypes = [kUTTypeImage as String];
self.present(self.imagePicker,completion: nil)
}
}