在以前版本的 swift 中,您在 ViewController 中创建一个 AVCaptureVideoPreviewLayer 并使用 view.layer.addSublayer(previewLayer) 将其添加到默认视图。
这是如何在 SwiftUI ContentView 中完成的?SwiftUI 中的所有视图类型似乎都没有 addSublayer。没有 Text("Hello World").layer.addSublayer....
我曾尝试将 previewLayer 添加到 ContentView 中的各种视图
import Foundation
import AVFoundation
import Combine
import SwiftUI
class Scanner: NSObject, AVCaptureMetadataOutputObjectsDelegate, ObservableObject {
@Published var captureSession: AVCaptureSession!
@Published var previewLayer: AVCaptureVideoPreviewLayer!
@Published var previewView: UIView
override init() {
captureSession = AVCaptureSession()
previewLayer = nil
//previewView = UIView()
super.init()
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.addInput(videoInput)
} else {
failed()
return
}
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
} else {
failed()
return
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.videoGravity = .resizeAspectFill
//previewView.layer.addSublayer(previewLayer)
}
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var scanner = Scanner()
var body: some View {
//Text("Hello World").layer.addSublayer(scanner.previewLayer)
//Text("")
Text("HelloWorld")//.addSublayer(scanner.previewLayer))
//.previewLayout(scanner.previewLayer)
.layer.addSublayer(scanner.previewLayer)
//.previewLayout(scanner.previewLayer)
//.overlay(scanner.previewView)
scanner.captureSession.startRunning()
}
}
Run Code Online (Sandbox Code Playgroud)
尝试添加 previewLayer 时编译错误
您不能直接添加图层。这就是为什么人们现在像许多其他东西一样把整个东西都藏在里面UIView(Controller)Representable。
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |