访问Swift 2.1 / iOS 9.1中的前置摄像头

时间:2015-11-16 13:27:36

标签: swift camera

我正在尝试制作自拍应用。我无法访问前置摄像头。当我运行以下代码时,应用程序仍然只选择后置摄像头。我正在使用Xcode 7.1.1。我也尝试过Xcode 7.2 Beta。有人可以帮忙吗?尝试在另一个问题中给出的解决方案,但这并没有解决问题。

import UIKit
import AVFoundation

class ViewController: UIViewController {




@IBOutlet weak var previewView: UIView!
@IBOutlet weak var capturedImage: UIImageView!


var captureSession: AVCaptureSession?
var stillImageOutput: AVCaptureStillImageOutput?
var previewLayer: AVCaptureVideoPreviewLayer?

enum AVCaptureDevicePosition : Int {
case Unspecified
case Front
case Back
}


func viewDidAppear(animated: Bool){
    super.viewDidAppear(animated)
    previewLayer!.frame = previewView.bounds
    reloadCamera()

}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

    func reloadCamera() {

    captureSession = AVCaptureSession()
    captureSession!.sessionPreset = AVCaptureSessionPresetPhoto

    //let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

    // access the front camera

    let videoDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    var captureDevice:AVCaptureDevice

    for device in videoDevices{
        let device = device as AVCaptureDevice
        if device.position == AVCaptureDevicePosition.Front {

        captureDevice = device
        }
}





    var error: NSError?

    var input: AVCaptureDeviceInput!

    do {
        input = try AVCaptureDeviceInput(device : captureDevice)
    } catch let error1 as NSError {
        error = error1
        input = nil
}



    if error == nil && captureSession!.canAddInput(input) {
        captureSession!.addInput(input)

    stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput!.outputSettings = [AVVideoCodecKey :AVVideoCodecJPEG]

    if captureSession!.canAddOutput(stillImageOutput){
        captureSession!.addOutput(stillImageOutput)

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer!.videoGravity = AVLayerVideoGravityResizeAspect
        previewLayer!.connection?.videoOrientation = AVCaptureVideoOrientation.Portrait
        previewView.layer.addSublayer(previewLayer!)

        captureSession!.startRunning()

    }


}


}




@IBAction func didPressTakePhoto(sender: UIButton) {


    if let videoConnection = stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo){
        videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
        stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {(sampleBuffer, error) in
            if (sampleBuffer != nil){

                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                let dataProvider = CGDataProviderCreateWithCFData(imageData)
                let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider,nil,true,CGColorRenderingIntent.RenderingIntentDefault)

                let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)
                self.capturedImage.image = image
                UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            }
    })
}

}

@IBAction func didPressTakeAnother(sender : AnyObject){
    captureSession!.startRunning()
}

}

0 个答案:

没有答案