如何解决AVFoundation 使用 Swift 切换按钮更改相机
我使用 AVFoundation 创建自定义相机视图。
如果我只使用前置或后置摄像头,它可以工作,我可以拍照没有问题,但是当我使用切换按钮更换相机时,它不起作用。
这是我的代码:
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],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)
}
}
它仅适用于一个相机视图,但我需要使用切换按钮。 谢谢大家...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。