2016-05-29 7 views
-1

Ich versuche, eine Kameraansicht erscheinen zu lassen, wie Sie in meinem Code unten sehen können Ich habe es eingerichtet, um Fehler anzuzeigen und nicht das Programm zu brechen, wenn irgendwelche Fehler jedoch auftreten Wenn ich diesen Code ausführe, tritt kein Fehler auf oder die Kameraansicht wird angezeigt. Ich führe es auf einem tatsächlichen Telefon und das Telefon hat angefordert, wenn es Erlaubnis hatte, die Kamera zu benutzen. Unten ist der CodeKein Fehler gedruckt aber Funktion läuft nicht

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

Sie haben den Catch-Block nach der Zeile 'print (error)' nicht geschlossen, so dass der Code, der ausgeführt werden soll, niemals ausgeführt wird, solange keine Fehler ausgegeben werden. –

Antwort

0

Legen Sie keinen Code in die catch. Das ist, wenn etwas schief geht.

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

Der Text von catch wird nur ausgeführt, wenn ein Fehler aufgetreten ist. Da sich Ihr Code innerhalb des catch-Blocks befindet, wird er nicht ausgeführt, da er keinen Fehler findet. Entfernen Sie den Code aus dem Catch-Block und legen Sie ihn wie von @penatheboss vorgeschlagen nach außen.