Программная корректировка положения AVCaptureVideoPreviewLayer - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь быстро сделать приложение для фотобудки. Я пытаюсь выровнять верхнюю часть моего cameraPreviewLayer (который является AVCaptureVideoPreviewLayer, а не UIView на раскадровке) в нижнюю часть UIView, который находится в верхней части экрана (я называю это topBorder - у него есть fla sh).

Я думал, что смогу сделать это, выполнив следующие действия:

        cameraPreviewLayer?.anchorPoint = CGPoint(x: 0, y: 0)
        cameraPreviewLayer?.position = CGPoint(x: 0, y: topBorder.frame.height)

Но, похоже, это не работает, cameraPreviewLayer сидит ниже, чем высота моей черной рамки в верхней части экрана. Идея состоит в том, что cameraPrevieLayer будет отображаться прямо под верхней границей на всех экранах (это для iPhone и iPad, которые поддерживают iOS 13 или новее).

Вот еще код для контекста:

import UIKit
import AVFoundation

class ViewController: UIViewController, PreviewDelegate {

    var cameraPreviewLayer: AVCaptureVideoPreviewLayer!
    @IBOutlet weak var topBorder: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        // Functions for capturing image
        setupCaptureSession()
        setupDevice()
        setupInputOutput()
        setupPreviewLayer()
        startRunningCaptureSession()

        super.viewDidLoad();

    }

    func setupPreviewLayer() {
        cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspect
        cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
        cameraPreviewLayer?.frame = self.view.frame
        self.view.layer.insertSublayer(cameraPreviewLayer!, at: 0)

        cameraPreviewLayer?.anchorPoint = CGPoint(x: 0, y: 0)
        cameraPreviewLayer?.position = CGPoint(x: 0, y: topBorder.frame.height)

    }
}

(это не весь код, если вам нужно больше контекста, просто дайте мне знать) Вот скриншот того, как это выглядит на iPhone X запущенном iOS 13.5:

enter image description here

...