如何解决在同一类中显示相机的前后视图
我想同时在单个视图上显示前置和后置摄像头视图(同一个 UIView 视图控制器中的 2 个独立视图)。现在只显示后视图。我已经尝试了几件事,但我还没有找到解决方案。我尝试创建了 2 个不同的捕获会话,但是没有用,我不知道它是否是 nescary。
import UIKit;import AVFoundation
class ViewController: UIViewController,AVCapturePhotoCaptureDelegate {
var captureSession: AVCaptureSession!
var stillImageOutput: AVCapturePhotoOutput!
var videoPreviewLayer: AVCaptureVideoPreviewLayer!
var frontCameraview = UIView()
var backCameraview = UIView()
var heightNum = 30
var brie = 0.1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
[frontCameraview,backCameraview].forEach{
$0.translatesAutoresizingMaskIntoConstraints = false
view.addSubview($0)
$0.backgroundColor = UIColor(red: 0.1,green: 0.1,blue: CGFloat(brie),alpha: 1)
heightNum += 120
brie += 0.1
}
NSLayoutConstraint.activate([
frontCameraview.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),frontCameraview.leadingAnchor.constraint(equalTo: view.leadingAnchor),frontCameraview.heightAnchor.constraint(equalTo: view.heightAnchor,multiplier: 1/3),frontCameraview.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 1/2),backCameraview.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),backCameraview.leadingAnchor.constraint(equalTo: frontCameraview.trailingAnchor),backCameraview.heightAnchor.constraint(equalTo: view.heightAnchor,backCameraview.widthAnchor.constraint(equalTo: view.widthAnchor,])
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Setup your camera here...
captureSession = AVCaptureSession()
captureSession.sessionPreset = .medium
guard let backCamera = AVCaptureDevice.default( AVCaptureDevice.DeviceType.builtInWideAngleCamera,for: AVMediaType.video,position: .back)
//.default(for: AVMediaType.video)
else {
print("Unable to access back camera!")
return
}
guard let frontCamera = AVCaptureDevice.default( AVCaptureDevice.DeviceType.builtInWideAngleCamera,position: .front)
//.default(for: AVMediaType.video)
else {
print("Unable to access back camera!")
return
}
do {
let input = try AVCaptureDeviceInput(device: backCamera)
let input2 = try AVCaptureDeviceInput(device: frontCamera)
//Step 9
stillImageOutput = AVCapturePhotoOutput()
if captureSession.canAddInput(input) && captureSession.canAddOutput(stillImageOutput) {
captureSession.addInput(input)
captureSession.addOutput(stillImageOutput)
setupLivePreview()
}
if captureSession.canAddInput(input2) && captureSession.canAddOutput(stillImageOutput) {
captureSession.addInput(input2)
captureSession.addOutput(stillImageOutput)
setupLivePreview()
}
}
catch let error {
print("Error Unable to initialize back camera: \(error.localizedDescription)")
}
}
func setupLivePreview() {
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
videoPreviewLayer.videoGravity = .resizeAspect
videoPreviewLayer.connection?.videoOrientation = .portrait
frontCameraview.layer.addSublayer(videoPreviewLayer)
backCameraview.layer.addSublayer(videoPreviewLayer)
//Step12
dispatchQueue.global(qos: .userInitiated).async { //[weak self] in
self.captureSession.startRunning()
//Step 13
dispatchQueue.main.async {
self.videoPreviewLayer.frame = self.frontCameraview.bounds
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。