2015-08-12 2 views
5

Я в основном после ответа на этот вопрос AVCaptureVideoPreviewLayer orientation - need landscape за исключением Swift.Как определить и применить ландшафтную ориентацию к AVCaptureVideoPreviewLayer в Swift?

Я ориентируюсь на iOS 8 и AVCaptureVideoPreviewLayer, похоже, не имеет функции setVideoOrientation.

Как я могу определить, что ориентация изменилась, и соответствующим образом поверните AVCaptureVideoPreviewLayer?

ответ

14

Обнаружить и применить его на viewWillLayoutSubviews.

Вот как:

override func viewWillLayoutSubviews() { 

    let orientation: UIDeviceOrientation = UIDevice.currentDevice().orientation 
    print(orientation) 

    switch (orientation) { 
    case .Portrait: 
     previewLayer?.connection.videoOrientation = .Portrait 
    case .LandscapeRight: 
     previewLayer?.connection.videoOrientation = .LandscapeLeft 
    case .LandscapeLeft: 
     previewLayer?.connection.videoOrientation = .LandscapeRight 
    default: 
     previewLayer?.connection.videoOrientation = .Portrait 
    } 
} 
+0

большое спасибо сэр ... Вы спасли мой день ... добавить эту строку перед перерыв поможет previewLayer.frame = сам .view.bounds –

+1

Необходимо обновить последнюю версию Swift. Обратите внимание, что видеоориентация перевернута с ориентацией устройства для ландшафтных режимов. –

0

обновление для Swift 3

override func viewWillLayoutSubviews() { 

    let orientation: UIDeviceOrientation = UIDevice.current.orientation 
    print(orientation) 

    switch (orientation) { 
    case .portrait: 
     videoPreviewLayer?.connection.videoOrientation = .portrait 
    case .landscapeRight: 
     videoPreviewLayer?.connection.videoOrientation = .landscapeLeft 
    case .landscapeLeft: 
     videoPreviewLayer?.connection.videoOrientation = .landscapeRight 
    case .portraitUpsideDown: 
      videoPreviewLayer?.connection.videoOrientation = .portraitUpsideDown 
    default: 
     videoPreviewLayer?.connection.videoOrientation = .portraitUpsideDown 
    } 
}