内容
- Info.plist 中添加权限
- 添加库
- 相册、相机四种权限
- 代码实现
Info.plist 中添加对应的权限
参考相关链接进行添加:Info.plist添加权限
添加库依赖库
import Photos
相册、相机四种权限
官方文档代码实现
相册
- 判断相机权限
notDetermined
第一次触发授权
authorized
用户已授权
restricted
App无相册访问权限
denied
用户明确拒绝授权
func judgeAlbumPermissions() {
// 获取相册权限
let authStatus = PHPhotoLibrary.authorizationStatus()
//用户尚未授权
if authStatus == .notDetermined {
// 第一次触发授权 alert
PHPhotoLibrary.requestAuthorization({ [weak self] (states) in
// 判断用户选择了什么
guard let strongSelf = self else { return }
if states == .authorized {
strongSelf.openPhoto()
} else if states == .restricted || states == .denied {
// 提示没权限
}
})
} else if authStatus == .authorized {
// 可以访问 去打开相册
self.openPhoto()
} else if authStatus == .restricted || authStatus == .denied {
// App无权访问照片库 用户已明确拒绝
}
}
- 已授权的情况下打开相册
func openPhoto() {
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
DispatchQueue.main.async {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
self.present(picker, animated: true)
}
}
}
- ViewController实现代理UIImagePickerControllerDelegate、UINavigationControllerDelegate
extension HomeViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
// 获取选择的图片
guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage]
as? UIImage else {
print("选择失败")
return
}
picker.dismiss(animated: true) {
self.dealwith(image: pickedImage)
}
}
}
相机
跟相册类似,此处直接贴代码不做说明。同样需要实现代理UIImagePickerControllerDelegate、UINavigationControllerDelegate
func selectCamera() {
// 判断相机权限
let authStatus = AVCaptureDevice.authorizationStatus(for: .video)
//用户尚未授权
if authStatus == .notDetermined {
// 第一次触发授权 alert
PHPhotoLibrary.requestAuthorization({ [weak self] (states) in
// 判断用户选择了什么
guard let strongSelf = self else { return }
if states == .authorized {
strongSelf.openCamera()
} else if states == .restricted || states == .denied {
// 提示没权限
SwiftNotice.showText("No access to Access System Camera!", autoClear: true, autoClearTime: 3)
}
})
} else if authStatus == .authorized {
// 可以访问 去打开相册
self.openCamera()
} else if authStatus == .restricted || authStatus == .denied {
// App无权访问照片库 用户已明确拒绝
SwiftNotice.showText("No access to Access System Camera!", autoClear: true, autoClearTime: 3)
}
}
// 打开相机
func openCamera() {
self.clearAllNotice()
if UIImagePickerController.isSourceTypeAvailable(.camera) {
DispatchQueue.main.async {
let cameraPicker = UIImagePickerController()
cameraPicker.delegate = self
cameraPicker.allowsEditing = true
cameraPicker.sourceType = .camera
//在需要的地方present出来
self.present(cameraPicker, animated: true, completion: nil)
}
}
Demo
暂无,有时间再完善了!!!
有不明白或者出错的地方可以私信我!!
手把手教!
网友评论