download image sous swift 3

Bonsoir,


 


Je rencontre une difficulté dans mon code, je cherche a downloader des images qui son différente sous Alamofire.


Le lien de l'image ce trouve dans mon json.


 


pouvez-vous me donnée un tuto ou une aide.


 


C'est la première fois que je fait cela et n'y arrive pas.


 


Merci de votre aide,


Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur
    décembre 2016 modifié #2

    Salut,


     


    Je te conseille ce framework : https://github.com/rs/SDWebImage


  • LarmeLarme Membre
    décembre 2016 modifié #3

    On va commencer tranquillement par demander quelques infos.


    Je découpe volontairement mais je préfère être sûr que tu maà®trises certains concepts/algo plutôt que de donner du code tout fait qui ne t'aidera pas forcément si tu rencontres un problèmes similaire à  l'avenir.


     


    Tu as un JSON qui contient des URLs d'images.


     


    As-tu réussi à  parser le JSON ?


    As-tu réussi à  récupérer les URLs ?


    Pour charger l'image brutalement, tu peux utiliser (NS)Data et sa méthode dataWithContentOfURL:. Attention, ça bloque le thread (potentiellement le main), et ça peut figer ton interface le temps que ça la télécharges, mais ça te permettra de valider ton parsing. Ensuite, tu peux utiliser imageWithData: (de UIImage) pour la mettre dans ton UIImageView.


    Pour éviter que ça bloque ton main thread (je simplifie, mais 99% du temps, ça s'ra dans ton main thread), il faut télécharger l'image de manière asynchrone, là , de bons pods existent : SDWebImage, AlamofireImage, AFNetworking qui ajoutent une méthode à  UIImageView (category) du type : setImageFromURL:placeHolder:, permettant de mettre un image d'attente (placeHolder), image déjà  dans ton bundle de préférence, et qui se charge de télécharger l'image à  l'URL donnée, de gérer un cache le tout de manière asynchrone.


  • CéroceCéroce Membre, Modérateur
    Bonjour,

    Quel est ton problème exact ? Tu ne parviens pas à  coder, ou ça ne fonctionne pas ?
    Utilises-tu AlamofireImage en complément ?

    (Personnellement, je trouve Alamofire "overkill" dans à  peu près toutes les situations. Son utilité avec Swift est très discutable).
  • Merci pour vos réponses.


     


    Tu as un JSON qui contient des URLs d'images.


    Oui


     


    As-tu réussi à  parser le JSON ? 


    Oui j'ai réussie a le faire


     


    As-tu réussi à  récupérer les URLs ?


    Les urls des image je les récupérer sans difficulté


     


    Mon problème c'est comment avec cette url récupérer l'image et la stocker et l'afficher.


     


    Voilà  merci de votre aide,


    C'est pas pour dire le FORUM est SUPER et très ACTIF.


  • CéroceCéroce Membre, Modérateur
    Le plus simple est d'utiliser SDWebImage (j'imagine que tu as installé Alamofire via Cocoapods, donc c'est pareil, il faut juste utiliser ce Pod).

    Un exemple tiré d'ici:
     
     
    imageView.sd_setImageWithURL(NSURL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage:UIImage(imageNamed:"placeholder.png"))
    En gros, il te faut une UIImageView (vide). Tu passes simplement l'URL d'une image à  charger. Pendant qu'elle se charge, c'est l'image "placeholder" qui s'affiche.
     
     

    Mon problème c'est comment avec cette url récupérer l'image et la stocker et l'afficher.

    As-tu vraiment besoin de la stocker ? Dans ce cas, le plus simple me semble d'utiliser NSURLSession pour accéder directement aux données, puis les stocker dans un fichier.
  • Une méthode avec AlamofireImage :



    if !(JSON["urlImage"] is NSNull){
    print("il y a une image dans le JSON")
    print(JSON["urlImage"]!)

    // recupère une image distante via AlamofireImage
    Alamofire.request(JSON["urlImage"] as! String)
    .responseImage { response in
    //debugPrint(response)
    //print(response.request)
    //print(response.response)
    //debugPrint(response.result)

    if let image = response.result.value {
    print("image downloaded: \(image)")
    uneCellule.imageView?.image = image // l'endroit où tu veux placer ton image, pour l'exemple, c'est dans une cellule d'un tableau pour ma part.
    }
    }
    }
  • Merci de votre aide j'avance bien dans mon application, avec vos conseilles et code.


     


    Ce code fonctionne bien,


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