USB 摄像头适配iPadOS17+ios端的配置
This commit is contained in:
51
packages/usb_camera_android/ios/Classes/UsbCameraView.swift
Normal file
51
packages/usb_camera_android/ios/Classes/UsbCameraView.swift
Normal file
@@ -0,0 +1,51 @@
|
||||
//
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user