AVCaptureVideoPreviewLayer, по-видимому, выходит за пределы родительских границ - PullRequest
0 голосов
/ 29 января 2019

У меня проблема с установкой AVCaptureVideoPreviewLayer в границах его родителей.

Вот контекстный код:

    capturePreview = AVCaptureVideoPreviewLayer(session: captureSession)
    guard let capturePreview = capturePreview else { return }

Когда у меня есть

   capturePreview.frame = cameraView.bounds
   cameraView.layer.addSublayer(capturePreview)

Происходит следующее:

enter image description here

И когда у меня

capturePreview.bounds = cameraView.layer.bounds
cameraView.layer.addSublayer(capturePreview)

это происходит enter image description here

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

enter image description here

Из того, что я виделв документации я не уверен, где я иду не так.Спасибо за любую помощь.Для справки я добавлю ограничения, которые я дал в раскадровке.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы добавили ограничения, прикрепляющие capturePreview к cameraView?Вам нужно будет сделать это в коде.Добавьте ограничения, чтобы левый, правый, верхний и нижний края capturePreview были присоединены к соответствующим ребрам cameraView.

Цель C

NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];

[NSLayoutConstraint activateConstraints:@[topConstraint, bottomConstraint, leftConstraint, rightConstraint]];

Свифт

let topConstraint = NSLayoutConstraint(item: capturePreview, attribute: .top, relatedBy: .equal, toItem: cameraView, attribute: .top, multiplier: 1.0, constant: 0.0)
let bottomConstraint = NSLayoutConstraint(item: capturePreview, attribute: .bottom, relatedBy: .equal, toItem: cameraView, attribute: .bottom, multiplier: 1.0, constant: 0.0)
let leftConstraint = NSLayoutConstraint(item: capturePreview, attribute: .left, relatedBy: .equal, toItem: cameraView, attribute: .left, multiplier: 1.0, constant: 0.0)
let rightConstraint = NSLayoutConstraint(item: capturePreview, attribute: .right, relatedBy: .equal, toItem: cameraView, attribute: .right, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([topConstraint, bottomConstraint, leftConstraint, rightConstraint])
0 голосов
/ 29 января 2019

Вы пытались использовать что-то вроде:

capturePreview.frame = cameraView.bounds
cameraView.layer.addSublayer(capturePreview)
cameraView.clipsToBounds = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...