Charger les éléments de la prochaine vue avant animation
cyril94440
Membre
Bonjour ,
je vous explique rapidement le problème.
Je change de vue en utilisant une animation de page, seulement le texte (la webView) ne s'affiche qu'une fois l'animation terminée alors que d'après le NSLog, la webview a déja fini de charger. Comment remédier à cela ?
Voici le code :
Merci d'avance
je vous explique rapidement le problème.
Je change de vue en utilisant une animation de page, seulement le texte (la webView) ne s'affiche qu'une fois l'animation terminée alors que d'après le NSLog, la webview a déja fini de charger. Comment remédier à cela ?
Voici le code :
<br />
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;<br />
[UIView beginAnimations: nil context: nil];<br />
[UIView setAnimationDuration: 0.3f];<br />
[UIView setAnimationTransition: trans forView: [(AppDelegate *)[[UIApplication sharedApplication] delegate] window] cache: YES];<br />
[self presentViewController:newPageController animated:NO completion:nil];<br />
[UIView commitAnimations];<br />
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ce qui serait intéressant c'est de savoir QUAND tu appelles ce code.
Et utiliser le delegate de UIApplication pour récupérer la fenêtre n'est pas forcément une bonne idée (c'est assez sale en fait). Je te conseille d'utiliser -windows de UIApplication ou de récupérer sa -keyWindow.
Concernant le problème de sujet voici les détails :
Sur la première page, j'appelle la deuxième grâce à la méthode délégué de la UIWebView :
Et donc dedans, j'appelle la suivante grâce au code de mon premier post.
Ensuite, sur le contrôleur appelé , je charge ma nouvelle UIWebView dans le viewDidLoad.
Puis dans le :
Je met un NSLog.
Et ce NSLog s'affiche avant que la transition soit fini, pourtant derrière l'animation PageCurl on ne visualise pas déjà le contenu de la UIWebView, et du coup ca fait une espèce de saccade pas super.
Ton problème est que la webview s'affiche vide. Si tu veux qu'elle s'affiche pleine, il faut bien qu'elle ait chargé les données, non ?
L'animation se met pas a jour avant qu'elle soit fini c'est pour ça ?
Du coup je lance l'animation directement de la seconde vue , donc celle qui va s'afficher , une fois la webview chargée .
Comment faire ça proprement ?
Les animations se font sur des CALayers, qu'on peut voir comme des caches des images rendues. De fait, on dirait que l'animation est faite avec le contenu de la CALayer avant le lancement de l'animation. N'ayant jamais tenté de mettre à jour le contenu d'une CALayer pendant une animation, je n'en sais pas plus.
De toute façon, même si ça fonctionnait, ce n'est pas ce que tu veux, parce qu'on verrait la webview vide se remplir pendant l'animation. Il faut dans tous les cas qu'elle soit chargée avant.
Là , je ne comprends pas bien.
Actuellement , j'appelle mon view controller(VC) numéro 2 (celui qui contient la web view) depuis le numéro 1 (celui qui est affiché avant l'animation).
Or le délégate de la webview du VC2 est le VC2, donc comment depuis le VC1 , charger le VC2 attendre qu'il soit chargé puis lancer l'animation.
J'ai d'abord pensé a déclarer le VC1 en tant que délégué de la webview du VC2, sauf que les 2 sont de la même classe , de plus le didfinishload ne semble pas s'appeler.
Enfin bref je sais pas comment m'y prendre, quelles méthodes utiliser (addSubview, presentVC, ou autre)
1) Mettre VC1 en délégué de la webview temporairement
Je ne vais pas aller dans les détails; l'implémentation est simple, mais l'archi n'est pas très claire.
Le fait que les deux VC soient de la même classe (...étrange) n'a pas d'importance, puisque la webview n'a qu'un délégué.
2) Implémenter un système de délégation.
VC2 prévient VC1(son délégué) quand la webview aura été chargée. Exemple:
ViewController2.h
Il faut mettre VC1 en délégué.
Ensuite, il suffira d'appeler:
dans l'implémentation de [font=helvetica, arial, sans-serif]webViewDidFinishLoading dans VC2.[/font]
(Les 2 VC sont de la même classe car il s'agit de UIWebView différentes, et dont les transitions doivent être gérées en iOS, pas en web).
Dernier petit point et après je pense que ca fonctionnera :
Je n'arrive pas à charger mon VC2.
Lorsque je fais :
Le viewDidLoad n'est pas appelé , donc encore moins le webViewDidFinishLoading.
j'ai essayé la méthode loadView mais sans succès.
Je n'ai pas compris désolé ...
Du coup je ne vois toujours pas comment faire