52 lines
1.5 KiB
Swift
52 lines
1.5 KiB
Swift
//
|
||
// 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)
|
||
}
|
||
}
|