gpt4 book ai didi

ios - 运行 AVCaptureDevice.requestAccess 阻塞

转载 作者:搜寻专家 更新时间:2023-11-01 07:01:10 26 4
gpt4 key购买 nike

在我的应用中,我想在用户按下相机按钮时请求相机访问权限,这会将他带到基于 AVFoundation 的相机实时预览。

该 View 是使用“现在模态转场”呈现的。

所以在我的 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

}

最佳答案

一个简单的解决方案是创建一个信号量并等待它直到调用完成闭包。 semaphore.wait 将阻塞当前线程,直到调用 semaphore.signal

let semaphore = DispatchSemaphore(value: 0)

AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
hasCameraPermission = true
} else {
hasCameraPermission = false
}
semaphore.signal()
})

semaphore.wait()

关于ios - 运行 AVCaptureDevice.requestAccess 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com