J'essaie d'utiliser UIImagePickerController
dans Swift mais ce 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 de code suivante
imag.delegate = self
(Type'ViewControlles does confoorm to protocol 'UIImagePickerControllerDelegate')
imagePicker.mediaTypes = kUTTypeImage
(use of unresolved identifier kUTTypeImage)
J'ai lu que kUTTypeImage
ne peut pas être utilisé dans Swift. Mais je ne sais pas, j'utilise mal cette fonction. De l'aide?
Merci!!
Vous devez également importer MobileCoreServices dans le contrôleur:
import MobileCoreServices
puis mettez le type entre crochets comme ceci:
image.mediaTypes = [kUTTypeImage]
Swift 2.0 et supérieur
image.mediaTypes = [kUTTypeImage as String]
Dans Swift 2.0 (Xcode 7), vous devez explicitement transtyper kUTTypeImage
(a CFString
) en String
:
picker.mediaTypes = [kUTTypeImage as String]
Et vous devez toujours importer Mobile Core Services pour que ce symbole soit défini:
import MobileCoreServices
Cela dit, la valeur par défaut de mediaTypes
est de toute façon [kUTTypeImage]
; vous n'avez donc pas besoin de la définir si c'est ce que vous voulez.
vous devez également ajouter UINavigationControllerDelegate
à la liste des protocoles de la ViewController
et à l’une des fonctions de délégation facultatives (si vous planifiez de prendre une photo)
Ceci est le code de travail pour votre problème:
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)
}
}
}
De votre morceau de code, il est très clair que vous faites des erreurs à deux endroits: on définit delegate
et ensuite, type de média imag.mediaTypes = kUTTypeImage
Première: Si vous examinez la définition delegate
de UIImagePickerController
, il est nécessaire de confirmer deux protocoles UINavigationControllerDelegate
et UIImagePickerControllerDelegate
, de sorte que vous devez adopter ces deux protocoles dans votre classe viewcontroller
comme suit:
class ViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate
deuxième erreur: Si vous regardez dans la partie définition de mediaTypes
, il faut clairement qu'un tableau de types de média soit passé, alors faites comme ça
imag.mediaTypes = [kUTTypeImage]
En dehors de cela, j'ai écrit une classe très descendante 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 au délégué comme ceci
class ViewController: UIViewController, UIImagePickerControllerDelegate
Selon la documentation, par défaut, les types de support sont définis sur image. Vous pouvez donc supprimer cette ligne, car vous ne la définissez que sur image.
N'oubliez pas de mettre en œuvre les méthodes de protocole décrites dans la documentation: documentation
Essaye ça
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
}
}
Syntaxe de Swift 1.2:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage]
}