2017-01-19 5 views
1

Почему вторая функция не вызывается, когда пользователь снимает фотографию и нажимает кнопку «Использовать фотографию»? Представление отклоняется, но оператор печати не работает, и функция не вызывается.Выбор фотокамер камеры не работает в Swift

@IBAction func openCamera(_ sender: UIBarButtonItem) 
    { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
      imagePicker.allowsEditing = false 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
     print("made it") 
     createImage(image: image) 
     self.dismiss(animated: true, completion: nil); 
    } 
+0

Вы сделали вид делегата? У вас есть ** imagePicker.delegate = self ** someplace (возможно, viewDidLoad)? – dfd

+0

в первом методе @dfd – Steve

+0

Простите, пропустил это. единственное, что я вижу, это ваше второе переопределение. Вы используете Swift 3? Если это так, это ** func imagePickerController (_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {** – dfd

ответ

1

Использование Swift 3, вот что у меня есть. Мой код предназначен для того, чтобы иметь (1) контроллер выбранного вида, который использует UIImagePickerController для использования камеры или выбора из рулона камеры, затем (2) продолжение к контроллеру вида редактирования. Я удалил код для кнопок, так как Я не использую IB.

class SelectViewController: UIViewController { 

    // selection and pass to editor 

    let picker = ImagePickerController() 
    var image = UIImage() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     picker.delegate = self 
    } 

extension SelectViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // MARK: Camera App 

    func openCameraApp() { 
     if UIImagePickerController.availableCaptureModes(for: .rear) != nil { 
      picker.allowsEditing = false 
      picker.sourceType = UIImagePickerControllerSourceType.camera 
      picker.cameraCaptureMode = .photo 
      picker.modalPresentationStyle = .fullScreen 
      present(picker, 
        animated: true, 
        completion: nil) 
     } else { 
      noCamera() 
     } 
    } 
    func noCamera(){ 
     let alertVC = UIAlertController(
      title: "No Camera", 
      message: "Sorry, this device has no camera", 
      preferredStyle: .alert) 
     let okAction = UIAlertAction(
      title: "OK", 
      style:.default, 
      handler: nil) 
     alertVC.addAction(okAction) 
     present(
      alertVC, 
      animated: true, 
      completion: nil) 
    } 

    // MARK: Photos Albums 

    func showImagePicker() { 
     picker.allowsEditing = false 
     picker.sourceType = .photoLibrary 
     present(picker, 
       animated: true, 
       completion: nil) 
     picker.popoverPresentationController?.sourceView = self.view 
    } 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
     image = chosenImage 
     self.performSegue(withIdentifier: "ShowEditView", sender: self) 
     dismiss(animated: true, completion: nil) 
    } 
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     dismiss(animated: false, completion: nil) 
    } 

    // MARK: Seque to EditViewController 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ShowEditView" { 
      if let vc = segue.destination as? EditViewController { 
       vc.image = image 
      } 
     } 
    } 

} 

Если вы не segueing другому VC, удалите .performSegue вызова и код ниже конечного MARK: обозначение. (Камера/выбранное изображение находится в image var.)