WatchOS nsurlsession images animation

Bonjour


 


J'ai trouvé de nombreuses docs sur la façon d'animer des images avec Watchkit.


Mais il faut pour cela au préalable charger les images dans Images.xcassets.


 


Or je voudrais animer 10 images que je récupère avec NSURLSession mais je ne trouve aucun exemple, aucune doc sur le sujet pour Watchkit...


 


Avez-vous une idée ?


 


Merci


Réponses

  • :'(


     


    Alors sur un iTruc, c'est facile mais alors sur une Watch personne ne sait...?


  • CéroceCéroce Membre, Modérateur
    Désolé, mais aucun client ne m'a jamais encore demandé une appli pour Apple Watch...

    Ceci dit, où bloques-tu exactement ? Tu voudrais l'afficher avec SpriteKit, par exemple ?
  • macphimacphi Membre
    octobre 2017 modifié #4

    sur iOS je télécharge 10 images sur un site et je place les images dans un tableau puis je les anime :



    self.img_RadarSat.animationImages = self.imagesListArraySat
    self.img_RadarSat.animationDuration = 3.0
    self.img_RadarSat.animationRepeatCount = 2
    self.img_RadarSat.startAnimating()

    Mais sur watchOS point de méthode animationImages !


     


    Alors (oui c'est pourri) j'ai fait ça et j'anime en tapant sur le bouton :D   :



    @IBAction func AnimRadar() {

    switch imageLoop {

    case 0:
    self.img_Radar1.setImage(self.imagesListArray[1])
    imageLoop = 1
    case 1:
    self.img_Radar1.setImage(self.imagesListArray[2])
    imageLoop = 2
    case 2:
    self.img_Radar1.setImage(self.imagesListArray[3])
    imageLoop = 3
    case 3:
    self.img_Radar1.setImage(self.imagesListArray[4])
    imageLoop = 4
    case 4:
    self.img_Radar1.setImage(self.imagesListArray[5])
    imageLoop = 5
    case 5:
    self.img_Radar1.setImage(self.imagesListArray[6])
    imageLoop = 6
    case 6:
    self.img_Radar1.setImage(self.imagesListArray[7])
    imageLoop = 7
    case 7:
    self.img_Radar1.setImage(self.imagesListArray[8])
    imageLoop = 8
    case 8:
    self.img_Radar1.setImage(self.imagesListArray[9])
    imageLoop = 0
    default:
    self.img_Radar1.setImage(self.imagesListArray[9])
    }

    }

    Ce que je souhaite c'est réussir à  animer les images comme sur iOS mais sans la fonction qui va bien c'est pas simple...


    >:(


     


    On peut animer des images sur WatchOS simplement en les important dans Images.xcassets mais quid des images récupérées en lançant l'app...


     


    J'ai posé la question sur un site anglais et j'ai aussi fait choux blanc...


     


    C'est triste parce qu'on est quand même quatre à  utiliser mon app en Bretagne !


    ::)




  •  


    Alors (oui c'est pourri) j'ai fait ça et j'anime en tapant sur le bouton :D   :



    @IBAction func AnimRadar() {

    switch imageLoop {

    case 0:
    self.img_Radar1.setImage(self.imagesListArray[1])
    imageLoop = 1
    case 1:
    self.img_Radar1.setImage(self.imagesListArray[2])
    imageLoop = 2
    case 2:
    self.img_Radar1.setImage(self.imagesListArray[3])
    imageLoop = 3
    case 3:
    self.img_Radar1.setImage(self.imagesListArray[4])
    imageLoop = 4
    case 4:
    self.img_Radar1.setImage(self.imagesListArray[5])
    imageLoop = 5
    case 5:
    self.img_Radar1.setImage(self.imagesListArray[6])
    imageLoop = 6
    case 6:
    self.img_Radar1.setImage(self.imagesListArray[7])
    imageLoop = 7
    case 7:
    self.img_Radar1.setImage(self.imagesListArray[8])
    imageLoop = 8
    case 8:
    self.img_Radar1.setImage(self.imagesListArray[9])
    imageLoop = 0
    default:
    self.img_Radar1.setImage(self.imagesListArray[9])
    }

    }



    ???



    imageLoop ++
    self.img_Radar1.setImage(self.imagesListArray[imageLoop])
    if imageLoop == 9 {
    imageLoop = 0
    }


  • A chaque fois que je poste du code ici je prends un taquet...!


     


    Merci pour l'optimisation !


    o:)


  • DrakenDraken Membre
    octobre 2017 modifié #7

    C'est en forgeant qu'on devient forgeron. J'ai jeté dans le feu les sources de mes premières années de programmation pour éviter la honte..


     


    EDIT : LeRhino a parlé de SpriteKit. C'est très certainement la solution a ton problème.


  • C'est sûr que si je devais poster mon code... C'est ma première app !


     


    SpriteKit je vais regarder, je pensais que c'était pour les jeux...


  • Laisse tomber SpriteKit. Je viens de jeter un regard rapide sur WatchKit. Utilise plutôt un Timer pour piloter le changement d'images.



  • var timeImage: Timer!

    timeImage = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(afficheImage), userInfo: nil, repeats: true)

    quelque chose comme ça ?


  • Excellent ça fonctionne !!!!


     


    Le coup du Timer c'est génial !


     


    Un grand merci !


     


    :D     o:)


  • ça c'est la vieille syntaxe datant de Napoléon 1, quand les mammouths hantaient encore les rues de Paris. 


     


    Essaye plutôt :



    import UIKit

    class ViewController: UIViewController {

    var timer:Timer?
    var compteur = 0
    // 0.1 seconde entre chaque pulsation du Timer
    let delaiTimer:TimeInterval = 0.1

    override func viewDidLoad() {
    super.viewDidLoad()

    activerTimer()
    }

    func faireUnTrucAvecLeTimer() {
    compteur += 1
    print (compteur)
    }

    func activerTimer() {
    timer = Timer.scheduledTimer(
    withTimeInterval: delaiTimer,
    repeats: true,
    block: { _ in self.faireUnTrucAvecLeTimer() })
    }

    func desactiverTimer() {
    timer?.invalidate()
    timer = nil
    }

    }


    C'est du code classique. Il ne devrait y avoir aucune difficulté pour l'adapter à  la Watch.

  • macphimacphi Membre
    octobre 2017 modifié #13

     


     


    ça c'est la vieille syntaxe datant de Napoléon 1, quand les mammouths hantaient encore les rues de Paris. 

    :D  :D


     


    Je vais adapter ton code mais je suis tombé sur un truc dingue !


    Avec la syntaxe préhistorique, je n'ai même plus besoin d'appuyer sur le bouton pour que l'animation se déclenche !


    Les images sont mises à  jour et animées dès que je lance l'app...!!


    Et c'est au final ce à  quoi je voulais arriver sans jamais oser l'espérer pour l'instant...


    Alors que le code ajouté figure bien dans une fonction @IBAction...


     


    Attention les yeux, voici mon code :



    @IBAction func AnimRadar() {

    vitesseTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(miseAJourVitesse), userInfo: nil, repeats: true)

    }

    @objc func miseAJourVitesse() {

    imageLoop = imageLoop + 1
    self.img_Radar1.setImage(self.imagesListArray[imageLoop])
    if imageLoop == 9 {
    imageLoop = 0
    }
    }

    Une idée ?


  • DrakenDraken Membre
    octobre 2017 modifié #14

    C'est étrange. Tu devrais exécuter l'application en mode pas à  pas avec le débugeur pour voir quand l'IBAction se déclenche. Ou plus simplement mettre un point d'arrêt sur la ligne " vitesseTimer = ... " pour voir quand elle s'active.


     


    EDIT : En y réfléchissant, mon exemple initialise le Timer dans le viewDidLoad() du contrôleur. Si tu fais la même chose, c'est normal que l'animation se déclenche toute seule, sans intervention de l'utilisateur.

  • Non j'appelle tout dans le bouton.


     


    Faut que je regarde ça de plus près et après je vais intégrer ton code pour comparer !


     


    C'est vraiment très intéressant à  faire tout ça...


  • CéroceCéroce Membre, Modérateur
    octobre 2017 modifié #16

    imageLoop ++
    self.img_Radar1.setImage(self.imagesListArray[imageLoop])
    if imageLoop == 9 {
    imageLoop = 0
    }


    Encore trop long petit scarabée.

    imageIndex = (imageIndex+1) % 10
  • LarmeLarme Membre
    octobre 2017 modifié #18

    J'fais pas de Watch, mais WKImageAnimatable (adopté par WKInterfaceImage) semble plus approprié, notamment la méthode startAnimatingWithImages(in imageRange:duration:repeatCount:), non ?


     


    De ce que j'ai cru en comprendre en lisant rapidement, cela semble faire le boulot de UIImageView et ses animationImages, et cie.


  • oui mais le problème ça ne fonctionne que pour des images qu'on place dans Images.xcassets avant la compilation...


    avec NSURLSession niet...




  • J'fais pas de Watch, mais WKImageAnimatable (adopté par WKInterfaceImage) semble plus approprié, notamment la méthode startAnimatingWithImages(in imageRange:duration:repeatCount:), non ?


     


    De ce que j'ai cru en comprendre en lisant rapidement, cela semble faire le boulot de UIImageView et ses animationImages, et cie.




    Oui, mais cela utilise un système bizarre. La liste des images à  animer est forcément un tableau de String contenant le nom symbolique des graphismes dans le bundle (Images.xcassets).


     


    Je crois que la solution est plutôt à  chercher ici : https://developer.apple.com/documentation/uikit/uiimage/1624149-animatedimage

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