mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-01-31 00:45:24 +01:00
58 lines
1.8 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|