AVFoundation使用Swift切换按钮更换摄像头
我使用AVFoundation创建自定义相机视图 如果我只使用前置或后置摄像头,它就可以工作。我可以拍照。没有问题,但当我使用切换按钮更换摄像头时,它就不工作了 我认为这是一个会话问题,我需要在更改相机视图时删除会话 我没有解决这个问题有人能帮我解决这个问题吗 这是我的密码:AVFoundation使用Swift切换按钮更换摄像头,swift,avfoundation,ios-camera,Swift,Avfoundation,Ios Camera,我使用AVFoundation创建自定义相机视图 如果我只使用前置或后置摄像头,它就可以工作。我可以拍照。没有问题,但当我使用切换按钮更换摄像头时,它就不工作了 我认为这是一个会话问题,我需要在更改相机视图时删除会话 我没有解决这个问题有人能帮我解决这个问题吗 这是我的密码: func getFrontCamera() -> AVCaptureDevice?{ let videoDevice = AVCaptureDevice.DiscoverySession(deviceTyp
func getFrontCamera() -> AVCaptureDevice?{
let videoDevice = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .front).devices.first
return videoDevice
}
func getBackCamera() -> AVCaptureDevice?{
let videoDevice = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.back).devices.first
return videoDevice
}
func setUpCamera() {
let session = AVCaptureSession()
if usingFrontCamera {
if let device = getFrontCamera() {
do {
let input = try AVCaptureDeviceInput(device: device)
if session.canAddInput(input) {
session.addInput(input)
}
if session.canAddOutput(output) {
session.addOutput(output)
}
previewLayer.videoGravity = .resizeAspectFill
previewLayer.session = session
session.startRunning()
self.session = session
} catch {
print(error)
}
}
} else {
if let device = getBackCamera() {
do {
let input = try AVCaptureDeviceInput(device: device)
if (session.canAddInput(input)) {
session.addInput(input)
}
if (session.canAddOutput(output)) {
session.addOutput(output)
}
previewLayer.videoGravity = .resizeAspectFill
previewLayer.session = session
session.startRunning()
self.session = session
} catch {
print(error)
}
}
}
}
这里是我的切换按钮:
@IBAction func didChangeCamera(_ sender: Any) {
usingFrontCamera = !usingFrontCamera
setUpCamera()
}
和AVCapturePhotoDelegate:
extension CameraViewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard let data = photo.fileDataRepresentation() else {
return
}
let image = UIImage(data: data)
session?.stopRunning()
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.frame = view.bounds
view.addSubview(imageView)
}
}
它只适用于一个摄像头视图,但我需要使用切换按钮。
谢谢大家