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!!
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]
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.
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)
}
}
}
à 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.
//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.....
}
}
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
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
}
}
swift 1.2 syntaxe:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage]
}