2017-01-19 1 views
1

Pourquoi la deuxième fonction n'est-elle pas appelée lorsque l'utilisateur prend la photo et clique sur le bouton Utiliser la photo? La vue est ignorée, mais l'instruction d'impression ne fonctionne pas et la fonction n'est pas appelée.La sélection de photos de l'appareil photo ne fonctionne pas dans 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

Avez-vous rendu le point de vue du délégué? Avez-vous ** imagePicker.delegate = self ** quelque part (probablement viewDidLoad)? – dfd

+0

en première méthode @dfd – Steve

+0

Désolé, raté ça. la seule autre chose que je vois est votre deuxième priorité. Utilisez-vous Swift 3? Si oui, c'est ** func imagePickerController (_ sélecteur: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {** – dfd

Répondre

1

En utilisant Swift 3, voici ce que j'ai. Mon code est destiné à avoir (1) un contrôleur de vue sélectionné, qui utilise le UIImagePickerController soit pour utiliser la caméra ou sélectionner de la caméra, puis (2) suite à un contrôleur de vue d'édition J'ai retiré le code pour les boutons, Je n'utilise pas 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 
      } 
     } 
    } 

} 

Si vous n'êtes pas segueing à un autre VC, retirez le .performSegue appel et le code ci-dessous le la note finale: notation. (L'appareil photo/l'image sélectionnée est dans la image var.)