1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import AVFoundation
import SwiftUI
/// Live viewfinder for the story camera. Aspect-fills whatever frame it's
/// given; the session keeps it upright as the phone rotates.
struct CameraPreviewView: UIViewRepresentable {
let session: StoryCameraSession
func makeUIView(context _: Context) -> PreviewView {
let view = PreviewView()
view.previewLayer.videoGravity = .resizeAspectFill
session.attach(previewLayer: view.previewLayer)
return view
}
func updateUIView(_: PreviewView, context _: Context) {}
final class PreviewView: UIView {
override static var layerClass: AnyClass {
AVCaptureVideoPreviewLayer.self
}
var previewLayer: AVCaptureVideoPreviewLayer {
// swiftlint:disable:next force_cast
layer as! AVCaptureVideoPreviewLayer
}
}
}