【发布时间】:2021-04-01 14:20:36
【问题描述】:
我正在尝试根据设备的方向旋转 AVCaptureVideoPreviewLayer。
-
在纵向模式下,它工作正常。
-
但是,在风景中,它看起来像这样:
-
我尝试过围绕 AVCaptureVideoPreviewLayer 旋转 UIView,但我不想采用这种方法,因为它会裁剪边缘。
-
我也尝试过手动设置。但是,打开时连接似乎为零,并且 AVCaptureVideoOrientation 的方向没有变化。
camera.preview.connection?.videoOrientation = AVCaptureVideoOrientation.landscapeRight
如何确保 AVCaptureVideoPreviewLayer 与设备的方向一致?
代码如下:
class CameraModel: NSObject, ObservableObject, AVCapturePhotoCaptureDelegate {
@Published var session = AVCaptureSession()
// since were going to read pic data...
@Published var output = AVCapturePhotoOutput()
// preview
@Published var preview : AVCaptureVideoPreviewLayer!
func setUp() {
// setting up camera...
do {
// setting configs...
self.session.beginConfiguration()
// change for your own
let device = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back)
let input = try AVCaptureDeviceInput(device: device!)
// checking and adding to session...
if self.session.canAddInput(input) {
self.session.addInput(input)
}
// same for output...
if self.session.canAddOutput(self.output) {
self.session.addOutput(self.output)
}
self.session.commitConfiguration()
}
catch {
print(error.localizedDescription)
}
}
}
struct CameraPreview: UIViewRepresentable {
@ObservedObject var camera: CameraModel
func makeUIView(context: Context) -> UIView {
let view = UIView(frame: UIScreen.main.bounds)
camera.preview = AVCaptureVideoPreviewLayer(session: camera.session)
camera.preview.frame = view.frame
// Your Own Properties
camera.preview.videoGravity = .resizeAspectFill
view.layer.addSublayer(camera.preview)
// starting session
camera.session.startRunning()
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
【问题讨论】:
-
我现在也遇到同样的问题,你找到解决办法了吗?
标签: ios swift swiftui avcapturesession