Files
flutterApp/packages/usb_camera_android/ios/Classes/UsbCameraView.swift

52 lines
1.5 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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