Interface de photo customisée

Bonjour à  tous,


 


Je me renseigne actuellement pour faire une interface custom pour prendre une photo avec l'iPhone. Simplement faire une vue avec un emplacement carré pour la caméra et un bouton pour prendre la photo. Après pas mal de recherches sur le web, je me demandais quel était le meilleur moyen de procéder. Jai vu plusieurs choses :


 


Tout d'abord, utiliser un AVCaptureVideoPreviewLayer. ça permet d'afficher la caméra et de récupérer une image avec la méthode "captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)". J'avais déjà  un peu fait joujou avec ça, mais le code est vite lourd et c'est très vite un bazar pour récupérer une image correctement.


 


Ensuite, j'ai aussi vu qu'il y avait la possibilité de partir sur un UIPickerViewController en masquant les contrôles par défaut. Je n'ai jamais essayé mais ça me semble un peu pénible pour agencer mon interface custom quoi...


 


Du coup je m'adresse à  vous pour savoir quelle serait la meilleure solution, la plus efficace pour réaliser une vue pour prendre une photo avec l'iPhone.


 


 


Avez-vous des idées ? Merci d'avance :)


Réponses

  • AliGatorAliGator Membre, Modérateur
    UIPickerViewController + overlayView c'est enfantin à  utiliser et super simple pour ce que tu veux faire.
  • Super merci AliGator c'est exactement ce que je cherchais. Du coup je suis tombé sur un exemple bien foutu de la doc qui m'a bien aidé.


  • BenjoBenjo Membre
    mai 2015 modifié #4

    Bonjour à  tous,


     


    Je fais remonter ce sujet suite à  une erreur que j'ai rencontrée et dont je n'arrive pas à  me débarrasser. Grâce l'exemple que j'ai fourni dans mon post précédent de la doc Apple, j'ai fait mon interface custom. Mais j'ai un petit soucis : lorsque j'appel la méthode "takePicture()", la méthode du delegate "imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])" n'est pas appelée.


     


    Il se trouve que j'ai une erreur dans le console : "Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.". J'ai cherché pas mal sur le web j'ai trouvé une réponse sur SO mais qui ne resoud pas mon problème. Voici le code que j'utilise (qui est le même que dans l'exemple) :



    var imagePickerController: UIImagePickerController?

    func showPhotoPicker() {
    let imagePickerController = UIImagePickerController()
    imagePickerController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
    imagePickerController.sourceType = UIImagePickerControllerSourceType.Camera
    imagePickerController.delegate = self

    if imagePickerController.sourceType == UIImagePickerControllerSourceType.Camera {
    imagePickerController.showsCameraControls = false

    NSBundle.mainBundle().loadNibNamed("OverlayView", owner: self, options: nil)
    overlayView?.frame = imagePickerController.cameraOverlayView!.frame
    imagePickerController.cameraOverlayView = overlayView

    // On centre la camera
    let cameraViewHeight = UIScreen.mainScreen().bounds.size.height * (4 / 3)
    let positionAdjustment = (UIScreen.mainScreen().bounds.size.height - cameraViewHeight) / 2
    imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0, -positionAdjustment)
    self.overlayView = nil
    }

    self.imagePickerController = imagePickerController

    self.presentViewController(self.imagePickerController!, animated: true, completion: nil)
    }

    @IBAction func takePhoto(sender: AnyObject) {
    self.imagePickerController?.takePicture()
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    println("ok") // Le "ok" ne s'affiche pas
    self.imagePickerController?.dismissViewControllerAnimated(true, completion: nil)

    // On affiche l'image
    photo = info[UIImagePickerControllerOriginalImage] as? UIImage

    self.collectionViewPublication.reloadData()
    }

    Avez-vous une idée du problème ? Merci d'avance.


Connectez-vous ou Inscrivez-vous pour répondre.