iPhoneX: AVCaptureVideoPreviewLayer не занимает весь экран? - PullRequest
0 голосов
/ 28 ноября 2018

Я сделал пользовательскую камеру в UIViewController, но я не могу предварительно просмотреть вывод камеры на весь экран iPhoneX.По-видимому, между обзором камеры и краем экрана имеется существенное отступление.Мой взгляд, кажется, был даже вставлен из безопасной зоны наверняка.Кто-нибудь может посоветовать?

iPhoneXs Макс: enter image description here

мой код:

class CaptureImageViewController: UIViewController, UIImagePickerControllerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate  {


    override func viewWillAppear(_ animated: Bool) {
        startAVCaptureSession()
    }


func startAVCaptureSession() {
    print("START CAPTURE SESSION!!")

    // Setting Up a Capture Session
    self.captureSession = AVCaptureSession()
    captureSession.beginConfiguration()

    // Configure input
    let videoDevice = AVCaptureDevice.default(for: .video)

    guard
        let videoDeviceInput = try? AVCaptureDeviceInput.init(device: videoDevice!) as AVCaptureInput,
        self.captureSession.canAddInput(videoDeviceInput)else {return}

    self.captureSession.addInput(videoDeviceInput)

    // Capture video output
    let videoOutput = AVCaptureVideoDataOutput.init()
    guard self.captureSession.canAddOutput(videoOutput) else {return}
    videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue.init(label: "videoQueue"))
    self.captureSession.addOutput(videoOutput)


    // start
    self.captureSession.commitConfiguration()
    self.captureSession.startRunning()


    // Display camera preview
    previewLayer = AVCaptureVideoPreviewLayer.init(session: self.captureSession)

    // Use 'insertSublayer' to enable button to be viewable
    view.layer.insertSublayer(previewLayer, at: 0)
    previewLayer.frame = view.frame
    previewFrame = previewLayer.frame


}




}

Мой макет:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 28 ноября 2018

Попробуйте изменить previewLayer.frame = view.frame на

let frame = UIScreen.main.bounds
view.layer.insertSublayer(previewLayer, at: 0)
previewLayer.frame = frame
previewFrame = previewLayer.frame
...