Вы должны установить рамки слоя в viewDidLayoutSubviews
, а не в viewDidLoad
.Обратите внимание, что размеры представлений изменяются , но добавленные вами слои остаются статичными, поскольку они не обновляются автоматически вместе с их представлениями контейнера:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.previewLayer.frame = self.camViewOutlet.bounds
self.previewFrame = previewLayer.frame
}
Также обратите внимание на разницу между frame
и bounds
.camViewOutlet.frame
относительно его суперпредставления (self.view
), но previewLayer
находится внутри camViewOutlet
, поэтому вы должны использовать camViewOutlet.bounds
.В основном, потому что camViewOutlet
ставит X точек ниже верхней части экрана (высота безопасной области), previewLayer
также ставит X точек ниже верхней части camViewOutlet
.
Есть и другиенебольшие проблемы в вашем коде.
Обратите внимание, что viewWillAppear
должен вызывать super.viewWillAppear
, и его можно вызывать несколько раз, поэтому вы никогда не должны добавлять представления и слои внутри него.
Вероятно, вам также не следует начинать захват до вызова viewDidAppear
.