// // ViewController.swift // camera // // Created by Natalia Terlecka on 10/10/14. // Copyright (c) 2014 imaginaryCloud. All rights reserved. // import UIKit import CameraManager class ViewController: UIViewController { // MARK: - Constants let cameraManager = CameraManager() // MARK: - @IBOutlets @IBOutlet weak var cameraView: UIView! @IBOutlet weak var cameraButton: UIButton! @IBOutlet weak var flashModeButton: UIButton! @IBOutlet weak var askForPermissionsButton: UIButton! @IBOutlet weak var askForPermissionsLabel: UILabel! // MARK: - UIViewController override func viewDidLoad() { super.viewDidLoad() cameraManager.showAccessPermissionPopupAutomatically = false askForPermissionsButton.hidden = true askForPermissionsLabel.hidden = true let currentCameraState = cameraManager.currentCameraStatus() if currentCameraState == .NotDetermined { askForPermissionsButton.hidden = false askForPermissionsLabel.hidden = false } else if (currentCameraState == .Ready) { addCameraToView() } if !cameraManager.hasFlash { flashModeButton.enabled = false flashModeButton.setTitle("No flash", forState: UIControlState.Normal) } } override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.hidden = true cameraManager.resumeCaptureSession() } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) cameraManager.stopCaptureSession() } // MARK: - ViewController private func addCameraToView() { cameraManager.addPreviewLayerToView(cameraView, newCameraOutputMode: CameraOutputMode.VideoWithMic) cameraManager.showErrorBlock = { [weak self] (erTitle: String, erMessage: String) -> Void in let alertController = UIAlertController(title: erTitle, message: erMessage, preferredStyle: .Alert) alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: { (alertAction) -> Void in })) self?.presentViewController(alertController, animated: true, completion: nil) } } // MARK: - @IBActions @IBAction func changeFlashMode(sender: UIButton) { switch (cameraManager.changeFlashMode()) { case .Off: sender.setTitle("Flash Off", forState: UIControlState.Normal) case .On: sender.setTitle("Flash On", forState: UIControlState.Normal) case .Auto: sender.setTitle("Flash Auto", forState: UIControlState.Normal) } } @IBAction func recordButtonTapped(sender: UIButton) { switch (cameraManager.cameraOutputMode) { case .StillImage: cameraManager.capturePictureWithCompletition({ (image, error) -> Void in let vc: ImageViewController? = self.storyboard?.instantiateViewControllerWithIdentifier("ImageVC") as? ImageViewController if let validVC: ImageViewController = vc { if let capturedImage = image { validVC.image = capturedImage self.navigationController?.pushViewController(validVC, animated: true) } } }) case .VideoWithMic, .VideoOnly: sender.selected = !sender.selected sender.setTitle(" ", forState: UIControlState.Selected) sender.backgroundColor = sender.selected ? UIColor.redColor() : UIColor.greenColor() if sender.selected { cameraManager.startRecordingVideo() } else { cameraManager.stopRecordingVideo({ (videoURL, error) -> Void in if let errorOccured = error { self.cameraManager.showErrorBlock(erTitle: "Error occurred", erMessage: errorOccured.localizedDescription) } }) } } } @IBAction func outputModeButtonTapped(sender: UIButton) { cameraManager.cameraOutputMode = cameraManager.cameraOutputMode == CameraOutputMode.VideoWithMic ? CameraOutputMode.StillImage : CameraOutputMode.VideoWithMic switch (cameraManager.cameraOutputMode) { case .StillImage: cameraButton.selected = false cameraButton.backgroundColor = UIColor.greenColor() sender.setTitle("Image", forState: UIControlState.Normal) case .VideoWithMic, .VideoOnly: sender.setTitle("Video", forState: UIControlState.Normal) } } @IBAction func changeCameraDevice(sender: UIButton) { cameraManager.cameraDevice = cameraManager.cameraDevice == CameraDevice.Front ? CameraDevice.Back : CameraDevice.Front switch (cameraManager.cameraDevice) { case .Front: sender.setTitle("Front", forState: UIControlState.Normal) case .Back: sender.setTitle("Back", forState: UIControlState.Normal) } } @IBAction func askForCameraPermissions(sender: UIButton) { cameraManager.askUserForCameraPermissions({ permissionGranted in self.askForPermissionsButton.hidden = true self.askForPermissionsLabel.hidden = true self.askForPermissionsButton.alpha = 0 self.askForPermissionsLabel.alpha = 0 if permissionGranted { self.addCameraToView() } }) } @IBAction func changeCameraQuality(sender: UIButton) { switch (cameraManager.changeQualityMode()) { case .High: sender.setTitle("High", forState: UIControlState.Normal) case .Low: sender.setTitle("Low", forState: UIControlState.Normal) case .Medium: sender.setTitle("Medium", forState: UIControlState.Normal) } } }