AVFoundation的圖層預覽

Henry Huang
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
}

--

--

Henry Huang
Henry Huang

Written by Henry Huang

大學讀企管/退伍後在業務圈打滾6年後突然有一天決定投入完全沒接觸過的程式設計/目前為一位iOS Developer/熱愛NBA/dafu1231@gmail.com

No responses yet