当 运行 应用程序通过 Mac Catalyst 显示 Mac 相机的完整相机宽度

Show full camera width from Mac camera when running app via Mac Catalyst

我知道我的 Mac本书的网络摄像头视野开阔。当我打开 Quicktime 应用程序并将 select 我的 MacBooks 相机作为输入时,我看到了这样一个不错的宽视频源。

现在,我有一个 iOS 应用程序,我正在 运行 使用 Mac Catalyst。这是我正在使用的构建组合。

当我 运行 这个应用程序时,我从网络摄像头获得了一个明显裁剪过的视频源。

这是我设置 AVCaptureSession

的 class
import Foundation
import AVFoundation


class BasicCamera: ObservableObject {
    
    @Published var authorizationState: AVAuthorizationStatus = .notDetermined
    
    let session = AVCaptureSession()
    
    init() {
        guard let device = AVCaptureDevice.default(for: .video) else {
            fatalError("Could not make capture device.")
        }
        
        guard let input = try? AVCaptureDeviceInput(device: device) else {
            fatalError("Could not make input")
        }
        
        session.beginConfiguration()
        
        session.addInput(input)
        
        session.commitConfiguration()
        
        session.startRunning()
    }
    
    public func requestCameraPermission() async -> AVAuthorizationStatus {
        return await withCheckedContinuation({ continuation in
            AVCaptureDevice.requestAccess(for: .video) { [unowned self] didComplete in
                self.authorizationState = AVCaptureDevice.authorizationStatus(for: .video)
                continuation.resume(with: .success(self.authorizationState))
            }
        })
    }
    
}

然后像这样将其添加到 ViewController:

let preview = AVCaptureVideoPreviewLayer(session: session)
preview.removeFromSuperlayer()  
preview.frame = self.view.bounds      
self.view.layer.insertSublayer(preview, at: 0)

请注意,我使用的 UIViewController 是通过 UIViewControllerRepresentable 协议一致性引入 SwiftUI 的。

我已经尝试了一些预设和发现会话参数,包括 .buildInWidtAngleCamera 但似乎无法让它显示完整的相机分辨率?除非我将其构建为实际的本机 Mac 应用程序,否则我在这里运气不好吗?

切换到 Optimize interface for Mac 它在 Target>General>Deployment Info>Next To the Mac checkmark button.

很可能将相机识别为 iPad

的肖像