AVCaptureViewModel
是一个 ObservableObject
,它暴露了 @Published
属性,可与提供的 CameraPreview
(SwiftUI) 或 CameraPreviewView
(UIKit) 配合使用。 它允许您围绕它们构建自定义界面,作为更大的 View
或 UIViewController
(分别是)的一部分,用于捕获照片和视频。
它可以用于捕获照片和视频,并立即发送到设备的照片库,或者您可以订阅提供的 @Published
属性,以便在捕获发生时获取它们。
为了提供更精细的控制,还有更多工作要做,但它现在已经可以正常工作了。
CurrentValueSubject
),用于发布事件(例如照片捕获开始/结束等)AVCaptureViewModel
上实现 @MainActor,并实现删除 DispatchQueue.main.async { }
CameraPreviewView
的大小以适应预览的大小(例如,当它处于照片模式时,它不会填满整个空间)敬请期待
.movieRecordingStarted
和 .movieRecordingFinished
)并自行解决。 在 UIKit 中,可以通过设置或覆盖 UIViewController
的 supportedInterfaceOrientations
属性来完成此操作。 目前没有办法在 SwiftUI 中限制每个视图的应用程序旋转。大部分幕后代码直接源自 Apple 的 AVCam 教程。 我从当前的(需要 iOS 17/Xcode 15 的部分)版本开始,并使其向后兼容到 iOS 13。我还重写了部分代码以使用 AVCaptureViewModel
的属性,以及替换 @IBAction
和 @IBOutlets
。 此外,我将他们的 PreviewView
变成了 CameraPreviewView
并用 CameraPreview
包装了它。