2016-05-29 69 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

您在'print(error)'行後沒有關閉catch塊,所以只要沒有錯誤拋出,您想運行的代碼就不會執行。 –

回答

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塊內部,所以它不會執行,因爲它沒有發現任何錯誤。 因此,從catch塊中移除代碼,並按照@penatheboss的建議將其放在外部。

相關問題