Поверните слой предварительного просмотра видео в соответствии с ориентацией устройства. Xcode Swift - PullRequest
0 голосов
/ 09 мая 2018

Я пытался заставить мою прямую трансляцию видео (слой предварительного просмотра камеры) поворачивать ориентации, когда устройство поворачивается. Я полностью застрял. Я предоставил свой текущий код ниже.

Примечание. Это приложение является расширением iMessage, а не обычным приложением.

Мой текущий код:

 func setupPreviewLayer() {
        cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspect
        orientationChange()
        cameraPreviewLayer?.frame.size.height = self.view.frame.size.height / 2
        cameraPreviewLayer?.frame.size.width = self.view.frame.size.width / 2
        liveVideoFeedPosition()
        cameraPreviewLayer?.position.x = self.view.frame.width / 2
        cameraPreviewLayer?.position.y = self.view.frame.height / 4  //- 33 original
        self.view.layer.addSublayer(cameraPreviewLayer!)
    }

** Не подряд

 func liveVideoFeedPosition() {
        if presentationStyle == MSMessagesAppPresentationStyle.compact {
            holoLogo.isHidden = true
            cameraPreviewLayer?.position.x = self.view.frame.width / 2
            cameraPreviewLayer?.position.y = self.view.frame.height / 4  //+33 original
        }
        if presentationStyle == MSMessagesAppPresentationStyle.expanded {
            holoLogo.isHidden = false
            cameraPreviewLayer?.position.x = self.view.frame.width / 2
            cameraPreviewLayer?.position.y = self.view.frame.height / 2  //- 27 original
        }
        self.OutlineImage.center.y = self.view.center.y // - 27 original
        self.OutlineImage.center.x = self.view.center.x
        self.view.addSubview(OutlineImage)
    }

** Не подряд

 override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {

        if UIDevice.current.orientation == .portrait {
            captureSession.stopRunning()
            self.view.layer.sublayers?.removeAll()
            orientation = "Portrait"
            setupInputOutput()
            setupPreviewLayer()
            captureSession.startRunning()
        }
        if UIDevice.current.orientation == .portraitUpsideDown {
            captureSession.stopRunning()
            self.view.layer.sublayers?.removeAll()
            orientation = "Portrait UpsideDown"
            setupInputOutput()
            setupPreviewLayer()
            captureSession.startRunning()
        }

        if UIDevice.current.orientation == .landscapeLeft {
            captureSession.stopRunning()
            self.view.layer.sublayers?.removeAll()
            orientation = "Landscape Left"
            setupInputOutput()
            setupPreviewLayer()
            captureSession.startRunning()
        }
        if UIDevice.current.orientation == .landscapeRight {
            captureSession.stopRunning()
            self.view.layer.sublayers?.removeAll()
            orientation = "Landscape Right"
            setupInputOutput()
            setupPreviewLayer()
            captureSession.startRunning()
        }
        liveVideoFeedPosition()
    }

** Не подряд

var orientation = "Portrait"

    func orientationChange() {
        if orientation == "Portrait" {
            cameraPreviewLayer?.connection?.videoOrientation = .portrait
        }
        if orientation == "Portrait UpsideDown" {
            cameraPreviewLayer?.connection?.videoOrientation = .portraitUpsideDown
        }
        if orientation == "Landscape Right" {
            cameraPreviewLayer?.connection?.videoOrientation = .landscapeRight
        }
        if orientation == "Landscape Left" {
            cameraPreviewLayer?.connection?.videoOrientation = .landscapeLeft
        }
    }

Весь этот код не является конкретным порядком.

...