问题描述
我使用 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 (将#修改为@)