// // UsbCameraView.swift // usb_camera_android // // iOS 原生预览 PlatformView:用 AVCaptureVideoPreviewLayer 直接渲染 session。 // import AVFoundation import Flutter import UIKit /// 以 AVCaptureVideoPreviewLayer 作为 backing layer 的 UIView。 final class UsbCameraPreviewUIView: UIView { override class var layerClass: AnyClass { AVCaptureVideoPreviewLayer.self } var previewLayer: AVCaptureVideoPreviewLayer { return layer as! AVCaptureVideoPreviewLayer } } final class UsbCameraView: NSObject, FlutterPlatformView { private let previewView: UsbCameraPreviewUIView init(engine: UsbCameraEngine, frame: CGRect) { self.previewView = UsbCameraPreviewUIView(frame: frame) super.init() previewView.previewLayer.session = engine.captureSession previewView.previewLayer.videoGravity = .resizeAspect } func view() -> UIView { return previewView } } final class UsbCameraViewFactory: NSObject, FlutterPlatformViewFactory { private let engine: UsbCameraEngine init(engine: UsbCameraEngine) { self.engine = engine super.init() } func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol { return FlutterStandardMessageCodec.sharedInstance() } func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) -> FlutterPlatformView { return UsbCameraView(engine: engine, frame: frame) } }