swift - 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], 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)
}
}
它仅适用于一个相机视图,但我需要使用切换按钮。感谢大家...
解决方案
推荐阅读
- laravel - Laravel - DB:raw
- sql - SAP HANA 将 YYYYWW 转换为 MM/DD/YYYY
- javascript - javascript获取URL参数和
- html - 来自Angular中API数据的模板中的未定义错误
- amazon-web-services - 部署 lambda 函数时如何从无服务器获取 API 网关 ID 作为输出部分
- scala - 如何从模式定义中添加结构字段?
- android - 在不使用 jar 文件的情况下共享或导出外部工具
- c - 为什么在调用 strtok_r 时出现段错误?
- python - 在推特检查 id、tweepy bot 时回复帐户
- java - Apache Poi - 使用值过滤器而不是使用 Java 的标签过滤器过滤数据透视表