для справки. Я взял ответ из этого учебного пособия.
шаг 1
добавление основы avfoundation в ваш проект
import AVFoundation
шаг 2
не забудьте установить описание использования камеры в Info.plist
Когда вы запрашиваете разрешение на использование камеры устройства, короткое сообщениепоявится в системном диалоге iOS по умолчанию.Вы можете настроить это сообщение, добавив ключ Privacy - Camera Usage Description
в свой файл Info.plist
.
шаг 3
при действии кнопки изменения профиля изображения, проверьте разрешение и т. Д..
@IBAction func ProfileImageButton(_ sender: UIButton) {
let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
switch cameraAuthorizationStatus {
case .notDetermined: requestCameraPermission()
case .authorized: presentCamera()
case .restricted, .denied: alertCameraAccessNeeded()
}
}
на основании вышеуказанного действия, которое будет удовлетворять условие,
Если пользователь никогда не отвечал на запрос о доступе к своей камере, вам необходимо ответить с помощьюсистемное предупреждение iOS для запроса разрешения:
func requestCameraPermission() {
AVCaptureDevice.requestAccess(for: .video, completionHandler: {accessGranted in
guard accessGranted == true else { return }
self.presentCamera()
})
}
там после продолжения доступа к камере
func presentCamera() {
let photoPicker = UIImagePickerController()
photoPicker.sourceType = .camera
photoPicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
self.present(photoPicker, animated: true, completion: nil)
}
Чтобы использовать изображение, снятое камерой, вам нужночтобы настроить контроллер представления на соблюдение и реализацию нескольких протоколов делегатов:
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
// ...
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let photo = info[UIImagePickerControllerOriginalImage] as! UIImage
// do something with the photo... set to UIImageView, save it, etc.
dismiss(animated: true, completion: nil)
}
Если доступ к камере запрещен или ограничен, вы можете предупредить пользователя и направить его в приложение «Настройки», чтобысделать соответствующую корректировку разрешений:
func alertCameraAccessNeeded() {
let settingsAppURL = URL(string: UIApplicationOpenSettingsURLString)!
let alert = UIAlertController(
title: "Need Camera Access",
message: "Camera access is required to make full use of this app.",
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.open(settingsAppURL, options: [:], completionHandler: nil)
}))
present(alert, animated: true, completion: nil)
}