2016-05-29 4 views
-1

Я пытаюсь сделать вид камеры, как вы можете видеть в моем коде ниже. Я настроил его для отображения любых ошибок и не нарушал программу, если возникли какие-либо ошибки, однако когда я запускаю этот код, ошибки не возникает или отображается камера. Я запускаю его на реальном телефоне, и телефон запросил, если у него есть разрешение на использование камеры. Ниже приведен кодНет ошибки, однако функция не работает

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    captureSession = AVCaptureSession() 
    captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080 

    let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 
    var input : AVCaptureDeviceInput? 
    let error : NSError? 
    do { 
     input = try AVCaptureDeviceInput(device: backCamera) 
    } catch let error as NSError? { 
     print(error) 



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

      videoOutput = AVCaptureVideoDataOutput() 
      //videoOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecKey] 

       if ((captureSession?.canAddOutput(videoOutput)) != nil){ 
        captureSession?.addOutput(videoOutput) 

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

} 
+0

Вы не закрыли блок catch после строки 'print (error)', поэтому код, который вы хотите запустить, никогда не выполняется до тех пор, пока не будут выброшены ошибки. –

ответ

0

Не помещайте код в catch. То есть, если что-то пойдет не так.

do { 
    input = try AVCaptureDeviceInput(device: backCamera) 
} catch let error as NSError? { 
    print(error) 
    return//Stop rest of code 
} 
if (captureSession?.canAddInput(input))!{ 
     captureSession?.addInput(input) 

     videoOutput = AVCaptureVideoDataOutput() 
     //videoOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecKey] 

      if ((captureSession?.canAddOutput(videoOutput)) != nil){ 
       captureSession?.addOutput(videoOutput) 

       previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
       previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect 
       previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait 
       cameraView.layer.addSublayer(previewLayer!) 
       captureSession?.startRunning() 
     } 
    } 
1

Тело улова выполняется только в случае возникновения ошибки. так как ваш код находится внутри блока catch, он не будет выполняться, так как он не обнаружит ошибки. Так что удалите код из блока catch и вытащите его наружу, как было предложено @penatheboss.

Смежные вопросы