【发布时间】:2018-07-05 12:30:15
【问题描述】:
在我的应用中,我想在用户按下相机按钮时请求相机访问权限,这会将他带到基于 AVFoundation 的相机实时预览。
该视图使用“当前模态转义”来呈现。
因此,在我的 ViewController 中,我当前覆盖了 shouldPerformSegue(),如果用户授予权限或已经授予权限,则返回 true,否则返回 false。
如果用户未授予访问权限,我将显示一个警报,他可以在其中转到设置以更改权限。这是在showPermissionInfo() 中完成的。
我的问题是,AVCaptureDevice.requestAccess 是异步调用的,因此在我检查它之前,hasCameraPermission 没有设置为 true。
有没有办法以阻塞的方式调用这些限制访问?
谢谢!
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if identifier == "Modally_ToCameraViewController"
{
var hasCameraPermission = false
if AVCaptureDevice.authorizationStatus(for: .video) == .authorized
{
hasCameraPermission = true
} else {
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
hasCameraPermission = true
} else {
hasCameraPermission = false
}
})
}
if(!hasCameraPermission){
showPermissionInfo()
}
return hasCameraPermission
}
return true
}
【问题讨论】: