在 MacOS 中使用 AVCaptureVideoPreviewLayer 的问题
Problems using AVCaptureVideoPreviewLayer in MacOS
我一直在尝试按照 tutorial 嵌入 AVCaptureVideoPreviewLayer(或者更简单地说,使用相机的非常基本的取景器),但在转换 iOS 代码以适应我的 MacOS 时遇到了问题申请。
当我尝试转换此代码块时出现问题:
// setting view for preview...
struct CameraPreview: UIViewRepresentable {
@ObservedObject var camera : CameraModel
func makeUIView(context: Context) -> UIView {
let view = UIView(frame: UIScreen.main.bounds)
camera.preview = AVCaptureVideoPreviewLayer(session: camera.session)
camera.preview.frame = view.frame
// Your Own Properties...
camera.preview.videoGravity = .resizeAspectFill
view.layer.addSublayer(camera.preview)
// starting session
camera.session.startRunning()
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
我的理解是 UIViews 仅用于 iOS 开发 而 MacOS 使用 NSViews 而不是 。知道这一点后,我尽力提出以下修改后的代码
// setting view for preview...
struct CameraPreview: NSViewRepresentable { // ERROR #1
@ObservedObject var camera : CameraModel
func makeNSView(context: Context) -> NSView {
let view = NSView(frame: CGRect(origin: .zero,
size: CGSize(width: 200, height: 200)))
camera.preview = AVCaptureVideoPreviewLayer(session: camera.session)
camera.preview.frame = view.frame
// Your Own Properties...
camera.preview.videoGravity = .resizeAspectFill
view.addSubview(camera.preview) //ERROR #2
// starting session
camera.session.startRunning()
return view
}
func updateUIView(_ uiView: NSView, context: NSView) {
}
}
问题是:
- 类型 'CameraPreview' 不符合协议 'NSViewRepresentable'(错误 #1)
- 无法将类型 'AVCaptureVideoPreviewLayer' 的值转换为预期的参数类型 'NSView'(错误 #2)
感谢您的帮助!我是一名中级 iOS 开发人员,但一直在努力培养我在 MacOS 开发方面的技能。
您忘记更新这部分内容updateUIView
func updateNSView(_ uiView: NSView, context: Context) { // << here !!
}
大约第二个...您尝试将图层添加到视图,但应将布局添加到图层,例如
let view = NSView(frame: CGRect(origin: .zero,
size: CGSize(width: 200, height: 200)))
view.wantsLayer = true // needed explicitly for NSView
...
view.layer.addSublayer(camera.preview)
我一直在尝试按照 tutorial 嵌入 AVCaptureVideoPreviewLayer(或者更简单地说,使用相机的非常基本的取景器),但在转换 iOS 代码以适应我的 MacOS 时遇到了问题申请。
当我尝试转换此代码块时出现问题:
// setting view for preview...
struct CameraPreview: UIViewRepresentable {
@ObservedObject var camera : CameraModel
func makeUIView(context: Context) -> UIView {
let view = UIView(frame: UIScreen.main.bounds)
camera.preview = AVCaptureVideoPreviewLayer(session: camera.session)
camera.preview.frame = view.frame
// Your Own Properties...
camera.preview.videoGravity = .resizeAspectFill
view.layer.addSublayer(camera.preview)
// starting session
camera.session.startRunning()
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
我的理解是 UIViews 仅用于 iOS 开发 而 MacOS 使用 NSViews 而不是 。知道这一点后,我尽力提出以下修改后的代码
// setting view for preview...
struct CameraPreview: NSViewRepresentable { // ERROR #1
@ObservedObject var camera : CameraModel
func makeNSView(context: Context) -> NSView {
let view = NSView(frame: CGRect(origin: .zero,
size: CGSize(width: 200, height: 200)))
camera.preview = AVCaptureVideoPreviewLayer(session: camera.session)
camera.preview.frame = view.frame
// Your Own Properties...
camera.preview.videoGravity = .resizeAspectFill
view.addSubview(camera.preview) //ERROR #2
// starting session
camera.session.startRunning()
return view
}
func updateUIView(_ uiView: NSView, context: NSView) {
}
}
问题是:
- 类型 'CameraPreview' 不符合协议 'NSViewRepresentable'(错误 #1)
- 无法将类型 'AVCaptureVideoPreviewLayer' 的值转换为预期的参数类型 'NSView'(错误 #2)
感谢您的帮助!我是一名中级 iOS 开发人员,但一直在努力培养我在 MacOS 开发方面的技能。
您忘记更新这部分内容updateUIView
func updateNSView(_ uiView: NSView, context: Context) { // << here !!
}
大约第二个...您尝试将图层添加到视图,但应将布局添加到图层,例如
let view = NSView(frame: CGRect(origin: .zero,
size: CGSize(width: 200, height: 200)))
view.wantsLayer = true // needed explicitly for NSView
...
view.layer.addSublayer(camera.preview)