comment capturer une caméra avec UIImagePickerController dans swift?

je suis en train d'utiliser UIImagePickerController dans swift mais n'est pas du travail...

mon ViewController:

class ViewController: UIViewController {

@IBOutlet var imag : UIView = nil
@IBAction func capture(sender : UIButton) {
    println("Button capture")
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
    {
        var imag = UIImagePickerController()
        imag.delegate = self
        imag.sourceType = UIImagePickerControllerSourceType.Camera;
       imag.mediaTypes = kUTTypeImage
        imag.allowsEditing = false

        self.presentViewController(imag, animated: true, completion: nil)

    }
   }   
}

j'ai des erreurs dans la ligne suivante de code

imag.delegate = self 
(Type'ViewControlles does confoorm to protocol 'UIImagePickerControllerDelegate')
imagePicker.mediaTypes = kUTTypeImage   
(use of unresolved identifier kUTTypeImage)

j'ai lu que kUTTypeImage ne pas utiliser dans swift.mais ne le savent pas, je suis mauvais. Toute aide?

Merci!!

32
demandé sur Kamarshad 2014-06-17 15:47:57

7 réponses

vous devriez aussi importer MobileCoreServices dans le controller:

import MobileCoreServices 

et puis mettre le type à l'intérieur des crochets, comme ceci:

image.mediaTypes = [kUTTypeImage]

Swift 2.0 et Supérieur

image.mediaTypes = [kUTTypeImage as String]
80
répondu Filippo Camillo 2017-12-04 22:19:30

Swift 2.0

dans Swift 2.0 (Xcode 7), vous devez explicitement lancer kUTTypeImage (CFString)String:

picker.mediaTypes = [kUTTypeImage as String]

Et vous avez encore le besoin d'importer des Mobile Services de Base pour ce symbole doit être définie:

import MobileCoreServices 

cela dit, la valeur par défaut de mediaTypes[kUTTypeImage] de toute façon, donc vous n'avez pas besoin de le régler si c'est ce que vous voulez.

42
répondu Aaron Brager 2015-09-04 22:29:56

vous devez également ajouter UINavigationControllerDelegate pour la liste des protocoles de l' ViewController et l'une des options facultatives déléguer des fonctions (si vous avez un rabotage pour obtenir une image)

voici le code de travail de votre numéro:

import UIKit
import MobileCoreServices

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
        println("i've got an image");
    }

    @IBAction func capture(sender : UIButton) {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){
            println("Button capture")

            var imag = UIImagePickerController()
            imag.delegate = self
            imag.sourceType = UIImagePickerControllerSourceType.Camera;
            imag.mediaTypes = [kUTTypeImage]
            imag.allowsEditing = false

            self.presentViewController(imag, animated: true, completion: nil)
        }
    }
}
23
répondu Roman 2014-06-25 07:16:46

à partir de votre morceau de code il est très clair que vous faites des erreurs à deux endroits un est en train de définir delegate et la seconde est de définir le type de média imag.mediaTypes = kUTTypeImage

Premier: si vous regardez dans le delegate définition de l' UIImagePickerController il a besoin pour confirmer deux protocole UINavigationControllerDelegate et UIImagePickerControllerDelegate vous devez donc adopter ces deux protocoles dans votre viewcontroller classe

class ViewController: UIViewController,UINavigationControllerDelegate,    UIImagePickerControllerDelegate

deuxième erreur:Si vous regardez dans la partie définition de mediaTypes il nécessite clairement un réseau de médias types de passé donc faire comme ceci

imag.mediaTypes = [kUTTypeImage]

en dehors de cela, j'ai écrit une descente très classe pour la même tâche

Il est facile à comprendre et à intégrer.

Ici vous allez

//Declare property 
var imagePicker:ImageVideoPicker?

//Call below line of code properly, it will return an image

self.imagePicker = ImageVideoPicker(frame: self.view.frame, superVC: self) { (capturedImage) -> Void in
        if let captureImage = capturedImage{
        //you did it.....

        }

    }
7
répondu Kamarshad 2014-09-12 07:00:31

vous devez Vous conformer à la délégué comme ceci

 class ViewController: UIViewController, UIImagePickerControllerDelegate

par documentation, par défaut les types de médias sont définis à image de sorte que vous pouvez aller de l'avant et supprimer cette ligne puisque vous ne la définissez qu'à image.

n'oubliez pas de mettre en œuvre les méthodes de protocole qui sont décrites dans la documentation: documentation

1
répondu Kris Gellci 2014-06-17 12:10:30

Essayez ceci

import UIKit
import AVFoundation

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
var imagePicker: UIImagePickerController!

@IBOutlet weak var ImageView: UIImageView!



override func viewDidLoad() {
    super.viewDidLoad()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func takeImage(sender: AnyObject) {

    imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .Camera
    presentViewController(imagePicker, animated: true, completion: nil)

}


func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    imagePicker.dismissViewControllerAnimated(true, completion: nil)
    ImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
}

}
1
répondu khan 2015-09-10 01:43:36

swift 1.2 syntaxe:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        let image = info[UIImagePickerControllerOriginalImage]



    }
0
répondu splendidthoughts 2015-06-13 21:14:13