Files
archived-plugins-workspace/plugins/barcode-scanner/ios/Sources/CameraView.swift
2023-09-14 09:34:04 -03:00

58 lines
1.8 KiB
Swift

// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import AVFoundation
import UIKit
class CameraView: UIView {
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
func interfaceOrientationToVideoOrientation(_ orientation: UIInterfaceOrientation)
-> AVCaptureVideoOrientation
{
switch orientation {
case UIInterfaceOrientation.portrait:
return AVCaptureVideoOrientation.portrait
case UIInterfaceOrientation.portraitUpsideDown:
return AVCaptureVideoOrientation.portraitUpsideDown
case UIInterfaceOrientation.landscapeLeft:
return AVCaptureVideoOrientation.landscapeLeft
case UIInterfaceOrientation.landscapeRight:
return AVCaptureVideoOrientation.landscapeRight
default:
return AVCaptureVideoOrientation.portraitUpsideDown
}
}
override func layoutSubviews() {
super.layoutSubviews()
if let sublayers = self.layer.sublayers {
for layer in sublayers {
layer.frame = self.bounds
}
}
if let interfaceOrientation = UIApplication.shared.windows.first(where: { $0.isKeyWindow })?
.windowScene?.interfaceOrientation
{
self.videoPreviewLayer?.connection?.videoOrientation = interfaceOrientationToVideoOrientation(
interfaceOrientation)
}
}
func addPreviewLayer(_ previewLayer: AVCaptureVideoPreviewLayer?) {
previewLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
previewLayer!.frame = self.bounds
self.layer.addSublayer(previewLayer!)
self.videoPreviewLayer = previewLayer
}
func removePreviewLayer() {
if self.videoPreviewLayer != nil {
self.videoPreviewLayer!.removeFromSuperlayer()
self.videoPreviewLayer = nil
}
}
}