I have all this code in my ViewDidAppear
captureSession = AVCaptureSession()
// let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var captureDevice:AVCaptureDevice! = nil
if (camera == CameraType.Front) {
let videoDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
for device in videoDevices{
let device = device as! AVCaptureDevice
if device.position == AVCaptureDevicePosition.Front {
captureDevice = device
break
}
}
} else {
captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
}
do {
let input = try? AVCaptureDeviceInput(device: captureDevice)
if (captureSession?.canAddInput(input) != nil){
captureSession?.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
if (captureSession?.canAddOutput(stillImageOutput) != nil){
captureSession?.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
cameraView.layer.addSublayer(previewLayer!)
captureSession?.startRunning()
}
cameraView.bringSubviewToFront(actionView)
previewImageView.bringSubviewToFront(actionView)
self.previewImageView.hidden = true
}
}
Xcode 8.2.1 • Swift 3.0.2
captureDevice = (AVCaptureDevice.devices() as? [AVCaptureDevice])?
.filter({ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .front}).first
Swift 2
captureDevice = (AVCaptureDevice.devices()
.filter{ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .Front})
.first as? AVCaptureDevice
Teresa Kozera
Did you try :
let device = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
.map { $0 as! AVCaptureDevice }
.filter { $0.position == .Front}
.first!
来源:https://stackoverflow.com/questions/34469189/how-to-switch-to-front-camera-in-swift-2