[英]How to rotate a AVCaptureVideoPreviewLayer by 90 degrees to correct it in iOS11?
我有一個AVCaptureVideoPreviewLayer
,將其設置為使用前置攝像頭Feed捕獲會話的實時預覽。 但是,輸出旋轉了90度,我正在嘗試使該圖層與我的應用程序的其余部分對齊,即“ Landscape
。 是否可以將其旋轉90 degrees
以進行校正?
到目前為止,這是我的代碼:
override func viewDidLoad() {
super.viewDidLoad()
let captureSession = AVCaptureSession()
guard let captureDevice = getDevice(position: .front) else { return }
guard let input = try? AVCaptureDeviceInput(device: captureDevice) else { return }
captureSession.addInput(input)
captureSession.startRunning()
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
view.layer.addSublayer(previewLayer)
previewLayer.frame = view.frame
previewLayer.videoGravity = .resizeAspectFill
previewLayer.connection?.automaticallyAdjustsVideoMirroring = false
previewLayer.connection?.isVideoMirrored = false
}
func getDevice(position: AVCaptureDevice.Position) -> AVCaptureDevice? {
let devices = AVCaptureDevice.devices() as NSArray;
for de in devices {
let deviceConverted = de as! AVCaptureDevice
if(deviceConverted.position == position){
return deviceConverted
}
}
return nil
}
您是否可以將previewLayer
添加到另一個UIView
,並嘗試像這樣旋轉:
private var captureView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
self.captureView = UIView(frame: self.view.bounds)
self.captureView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.view.addSubview(captureView)
// ...
captureView.layer.addSublayer(previewLayer)
// ...
self.rotateView(animated: false)
}
// Rotating captureView based on device orientation
func rotateView(animated: Bool) {
var transform: CGAffineTransform?
switch UIDevice.current.orientation {
case .portraitUpsideDown:
transform = CGAffineTransform(rotationAngle: CGFloat.pi)
case .landscapeLeft:
transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)
case .landscapeRight:
transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)
default:
break
}
guard animated else {
self.captureView.transform(transform)
return
}
UIView.animate(withDuration: 0.5, animations: {[weak self] in
self?.captureView.transform(transform)
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.