Вот мое быстрое решение (iOS 8), мне нужна была камера для QR-сканирования, поэтому мне действительно пришлось запрашивать ее использование.
Это обеспечивает
Поощряйте пользователя выбрать разрешить, если до ответа на вопрос о разрешении доступа к камере по умолчанию
Простой способ доступа к настройкам, если пользователь отклонил первый запрос.
Чтобы запустить камеру проверки вызовов в ViewDidAppear / или ViewDidLoad и т. Д., Мне нужно было использовать viewDidAppear, чтобы были установлены ограничения моих пользовательских просмотров камеры.
func checkCamera() {
let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)
switch authStatus {
case .authorized: break // Do your stuff here i.e. allowScanning()
case .denied: alertToEncourageCameraAccessInitially()
case .notDetermined: alertPromptToAllowCameraAccessViaSetting()
default: alertToEncourageCameraAccessInitially()
}
}
func alertToEncourageCameraAccessInitially() {
let alert = UIAlertController(
title: "IMPORTANT",
message: "Camera access required for QR Scanning",
preferredStyle: UIAlertControllerStyle.alert
)
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Allow Camera", style: .cancel, handler: { (alert) -> Void in
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
}))
present(alert, animated: true, completion: nil)
}
func alertPromptToAllowCameraAccessViaSetting() {
let alert = UIAlertController(
title: "IMPORTANT",
message: "Please allow camera access for QR Scanning",
preferredStyle: UIAlertControllerStyle.alert
)
alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel) { alert in
if AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo).count > 0 {
AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { granted in
DispatchQueue.main.async() {
self.checkCamera() } }
}
}
)
present(alert, animated: true, completion: nil)
}
Спасибо jamix выше за совет по использованию dispatch_async - делает ответ, чтобы показать недавно установленную функцию камеры, намного быстрее.
Извините за сочетание замыкающих замыканий .. хотел попробовать их.
person
DogCoffee
schedule
27.06.2015