AVFoundation的圖層預覽
3 min readFeb 6, 2018
使用AVFoundation可以用來自定義相機,幾乎全部都得自己定義,在這過程發現預覽圖層的轉向問題,終於找到解決方式
使用這個方法preViewLayer是自己創的預覽圖層
@objc func rotated() { if UIDeviceOrientationIsLandscape(UIDevice.current.orientation) { if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft { preViewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.landscapeRight }else { preViewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.landscapeLeft } } if UIDeviceOrientationIsPortrait(UIDevice.current.orientation) { if UIDevice.current.orientation == UIDeviceOrientation.portrait{ preViewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.portrait } else { preViewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.portraitUpsideDown } }}
然後加個監聽viewDidLoad或viewWillAppear
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.rotated), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
2018.04.18 更新
使用func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
修改自Apple simple code
let deviceOrientation = UIDevice.current.orientationguard let newVideoOrientation = AVCaptureVideoOrientation(rawValue: deviceOrientation.rawValue),deviceOrientation.isPortrait || deviceOrientation.isLandscape else {return}cameraPreviewlayer?.connection?.videoOrientation = newVideoOrientation
}