2016-08-21 57 views
3

這似乎可以將攝像機從後面切換到前面,但我試圖想出一個'if'語句,以便我可以將其切換回來。任何想法或建議?使用Swift中的按鈕切換攝像機

@IBAction func didTouchSwitchButton(sender: UIButton) { 


    let camera = getDevice(.Front) 
    let cameraBack = getDevice(.Back) 


    do { 
     input = try AVCaptureDeviceInput(device: camera) 
    } catch let error as NSError { 
     print(error) 
     input = nil 
    } 
    if(captureSession?.canAddInput(input) == true){ 
     captureSession?.addInput(input) 
     stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG] 
     if(captureSession?.canAddOutput(stillImageOutput) == true){ 
      captureSession?.addOutput(stillImageOutput) 
      previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
      previewLayer?.frame = cameraView.bounds 
      cameraView.layer.addSublayer(previewLayer!) 
      captureSession?.startRunning() 
     } 
    } 

}

回答

0

首先創建一個enum檢查相機類型:

enum CameraDirection { 
    case .front 
    case .back 
} 

那麼對於枚舉創建一個變量:

var currentDirection: CameraDirection = .front//or initial direction 

然後在你的didTouchSwitchButton功能:

if (currentDirection == .front) { 
    currentDirection = .back 
} else { 
    currentDirection = .front 
} 
reload() 

你可以看到我調用了一個名爲reload的函數。創建:

func reload() { 
    let camera = getDevice(.Front) 
    let cameraBack = getDevice(.Back) 


    do { 
     if currentDirection == .front { 
      input = try AVCaptureDeviceInput(device: camera) 
     } else { 
      input = try AVCaptureDeviceInput(device: cameraBack) 
     } 
    } catch let error as NSError { 
     print(error) 
     input = nil 
    } 
    //rest of code 
} 
+0

感謝您的幫助!我仍然有一個問題來定義.front .back。這些價值似乎並不能獨立發揮作用。 – craycades

+0

我相信這是因爲你正在使用getDevice。嘗試重命名它前進和後退或類似的東西 – penatheboss

+0

一切都建立好,但它似乎仍然不會切換相機。 – craycades