AVCaptureVideoPreviewLayer создает 2 вида при изменении размера - PullRequest
0 голосов
/ 30 апреля 2018

Я создал объект Camera, который прикрепляю к CameraViewController. Внутри объекта Camera есть следующий метод, который устанавливает AVCaptureVideoPreviewLayer на данном контроллере вида.

func displayPreview(on view: UIView) throws {
        guard let captureSession = self.captureSession, captureSession.isRunning else {
            throw CameraControllerError.captureSessionIsMissing
        }

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        view.layer.insertSublayer(self.previewLayer!, at: 0)
        previewLayer?.frame = view.bounds
        previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
        previewLayer?.connection?.videoOrientation = .portrait
        previewLayer?.masksToBounds = true
    }

В CameraViewController, чтобы установить объект камеры, я делаю следующее

var camera = Camera()

override func viewDidLoad() {
        super.viewDidLoad()
        configureView()
    }


    override func viewWillLayoutSubviews() {
        try? self.camera.displayPreview(on: self.view)
    }


    private func configureView(){
        self.view.addTapGestureRecognizer(action: {
            if let parentView = self.parent?.view.frame{
                UIView.animate(withDuration: 0.4, animations: {
                    self.view.layer.cornerRadius = 0
                    self.view.layer.masksToBounds = true
                    self.view.layer.borderWidth = 0
                    self.view.frame = parentView
                }, completion: nil)
            }
        })
    } 

Все это работает хорошо, с точки зрения изменения размера. Когда это происходит, похоже, что камера создает 2 вида, как на картинке, старый вид сверху и обновленный размер одного вида. Не только это, но и когда размер представления изменяется, это выглядит так, как только PreviewLayer перезагружается перед изменением размера (требуется некоторое время, прежде чем появится увеличенное представление). То, чего я пытаюсь добиться, - это непрерывный анимированный предварительный просмотр с изменением размера камеры. Что мне нужно изменить в моем коде? Я играл с размещением try? self.camera.displayPreview(on: self.view) в разных частях представления нагрузки, но это ничего не изменило.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...