我使用AVFoundation来使用前置相机拍摄照片。当设备方向为左横向时,一切正常,但当设备方向为右横向时,照片会倒过来拍摄。
func setOutputOrientation() {
var outputOrientation: AVCaptureVideoOrientation!
let connection = self.previewLayer.connection
if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft {
outputOrientation = AVCaptureVideoOrientation.LandscapeRight
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight {
outputOrientation = AVCaptureVideoOrientation.LandscapeLeft
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.Portrait {
outputOrientation = AVCaptureVideoOrientation.Portrait
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.PortraitUpsideDown {
outputOrientation = AVCaptureVideoOrientation.PortraitUpsideDown
}
connection.videoOrientation = outputOrientation
}
以下代码位于viewDidLoad方法中:
let device = getFrontCamera(
let error : NSError? = nil
let input: AVCaptureDeviceInput?
do {
input = try AVCaptureDeviceInput(device: device)
} catch _ {
input = nil
}
if input != nil {
session.addInput(input)
}
else {
print(error)
}
session.sessionPreset = AVCaptureSessionPresetPhoto
previewLayer = AVCaptureVideoPreviewLayer(session: session) as AVCaptureVideoPreviewLayer
previewLayer.frame = CGRectMake(0, 0, 300, 300)
previewLayer.setAffineTransform( CGAffineTransformTranslate(CGAffineTransformMakeScale(0.33, 0.33), -375, -480) )
previewLayer.position = upperRightPosition
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.view.layer.addSublayer(previewLayer)
let photoImage = UIImage(named:"PhotoTwo")
session.startRunning()
output.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(output)
{
session.addOutput(output)
}
self.setOutputOrientation()
session.startRunning()
- Asdrubal