Позиция предварительного просмотра AVCaptureVideoPreviewLayer начинается под панелью навигации (панелью инструментов).

Привет, я новичок в Swift. пытаюсь использовать AVCaptureVideoPreviewLayer для моего пользовательского приложения камеры. но захваченное изображение не совпадает с предварительным просмотром. пытался следовать

 self.previewLayer.frame = self.view.layer.bounds
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

вот мой фрагмент кода

 self.previewLayer.frame = self.view.layer.bounds
        self.view.layer.insertSublayer(self.previewLayer!, at: 0 )
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
         captureSession.startRunning()

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]

        dataOutput.alwaysDiscardsLateVideoFrames = true[capture screen][1]

result [![введите здесь описание изображенияизображение]2]2


person Uma Achanta    schedule 08.09.2017    source источник


Ответы (1)


Позиция просмотра начинается с (x:0,y:0) по умолчанию в UINavigationController. Панель навигации перекрывает вид на 64 пикселя (20 пикселей = строка состояния, 44 пикселя = панель навигации) по высоте. У вас есть два варианта исправления кадра слоя предварительного просмотра видео:

Вариант 1:

изменить положение Y слоя предварительного просмотра,

var frame = self.view.layer.bounds
frame.origin.y = 64
frame.size.height = frame.size.height-64
self.previewLayer.frame = frame

Вариант 2:

self.navigationController?.navigationBar.isTranslucent = false,

добавьте эту строку в метод ViewdidLoad(). по умолчанию isTranslucent = true, назначение false означает, что позиция рамки просмотра начинается с x:0 и y:64.

нет необходимости изменять код с помощью Option2

person AshokPolu    schedule 11.09.2017
comment
попробовал это. он правильно показывал только предварительный просмотр. не выходное изображение - person Uma Achanta; 11.09.2017