You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tauri-plugins-workspace/plugins/barcode-scanner/ios/Sources/CameraView.swift

58 lines
1.8 KiB

// 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
}
}
}