[Résolu] Ma bête noire : les animations + les gestes utilisateurs

Am_MeAm_Me Membre
septembre 2014 modifié dans API UIKit #1

Voilà  je ne sais pas si c'est le bon endroit pour en discuter mais j'ai (et je ne suis pas le seul je l'espère) avoir eu un problème pour me lancer concrètement dans les animations.


Je ne cherche pas à  faire des trucs complexes :


 


En résumé je cherche à  faire des trucs du genre (sans utiliser des classes faites par des personnes : je veux tout faire version maison on va dire et disons que ceux qui développent ce genre de chose ne sont pas très explicite et parfois même pas clair dans leur api) : 


 


Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur
    septembre 2014 modifié #2
    Pour que la vue puisse être affichée de côté comme ça avec un effet 3D c'est simplement une CATransform3D avec les bons paramètres (translation puis rotation autour de l'axe vertical et surtout un effet perspective apporté par la composante m34 de la matrice de transformation).


    Ce ne sont finalement que des maths avec application d'une matrice de transformation (j'espère que tu as vu ça en cours sinon c'est un peu trop compliqué à  t'expliquer l'application du calcul matriciel sur les espaces vectoriels juste dans un post sur un forum !)


    Pour la partie animation la méthode [UIView animateWithDuration:animations:] et ses consoe“urs peuvent suffire dans ce cas. Si tu veux des animations un peu plus complexes, découpées en plusieurs frames, avec des courbes d'animation non linéaires ou autre, il faudra alors passer par CoreAnimation (y'a 2 Programming Guides sur le sujet qui donnent toutes les bases nécessaires) mais dans ton cas la méthode de UIView est amplement suffisante.



    Après, en toute honnêteté, vu ton niveau en Objective-C et Cocoa, je pense qu'il est un peu tôt pour toi pour essayer de coder toi-même ce genre de chose, en particulier l'effet 3D. Il y a plein de petits détails à  penser, c'est mieux de maà®triser à  la fois la View Controller Hierarchy et CALayer pour manipuler tout ça et comprendre comment le tout interagit et il faut mieux déjà  bien maà®triser les bases avant de se lancer là  dedans car sinon tu vas t'embrouiller et devoir apprendre à  maà®triser plein de concepts nouveau à  la fois.


    Autant y aller par petit bouts un concept à  la fois tu les maà®triseras mieux ensuite. Et en attendant autant utiliser RESideMenu ou MMDrawerController ou autre pour faire tes menus, ils le font déjà  très bien, plutôt que de réinventer la roue, du moins jusqu'à  ce que tu aies appris à  maà®triser les concepts sous-jacente individuellement.



    ---


    Pour l'autre effet, celui du bouton qui sursaute, tu peux t'en sortir à  coup du [UIView animateWithDuration:animations:completion:] qui applique un CGAffineTransformScale sur le bouton pour le zoomer à  120% qui enchaine dans le completion par une autre [UIView animateWithDuration:animations:] qui va restaurer la transform à  CGAffineTransformIdentity
  • Am_MeAm_Me Membre
    septembre 2014 modifié #3

    Ouai j'ai abusé avec l'effet 3D !!! mais je n'avait pas d'autre application sous la main sans effet 3D dans la sideview.


     


    Non non les effet 3D j'ai pas étudié tout ça je vais pas me lancer dessus. Mais le fait de pouvoir slider en 2D ça m'intéresse énormément.


     


     




    Pour la partie animation la méthode [UIView animateWithDuration:animations:] et ses consoe“urs peuvent suffire dans ce cas. Si tu veux des animations un peu plus complexes, découpées en plusieurs frames, avec des courbes d'animation non linéaires ou autre, il faudra alors passer par CoreAnimation (y'a 2 Programming Guides sur le sujet qui donnent toutes les bases nécessaires) mais dans ton cas la méthode de UIView est amplement suffisante.

     




     


    Ok est-ce suffisant pour créer par exemple son propre "cercle" de chargement : j'ai oublié le nom exact.


     


    Et comme tu dis vu mon niveau en Obj-C faut pas que j'aille trop vite. Bon je vais jeter un oeil sur les 2 projets que tu m'a passé au dessus. 


     


    Merci pour les infos. 


  • AliGatorAliGator Membre, Modérateur
    Pardon sur celui que j'ai cité plus haut je pensais à  RESideMenu (et pas MSSideMenu)
  • Hannnn moi qui allais commencer à  lire la doc de MSSideMenu.


     


    No problemo.


  • Am_MeAm_Me Membre
    septembre 2014 modifié #6

    Juste comme ça j'ai utilisé podfile pour installer AFNetworking il y a 1 semaine : ça a marché biensur mais la pour RESideMenu ça me fait  : 


     


    [!] Unable to satisfy the following requirements:


     


    - `RESideMenu (~> 4.0.7)` required by `Podfile`


     


    Et mes lignes dans mon fichier pod : 



    # Uncomment this line to define a global platform for your project
    # platform :ios, "7.0"

    target "MonProjet" do
    pod 'AFNetworking', '2.2.1'
    platform :ios, '6.0'
    pod 'RESideMenu', '~> 4.0.7'
    end



    target "MonProjetTests" do

    end


    Quand je fait >> pod list > fichier.txt 


    et que je cherche le machin dedans ; il n'y a pas de référence pourtant sur la page il est indiqué que l'on peut utilisé pod


     


    Bon je sens que je vais devoir l'installer à  la mano


  • CéroceCéroce Membre, Modérateur

    Là , ce que CocoaPods te dit, c'est qu'il ne peut pas satisfaire la contrainte "la version de RESideMenu doit être >= 4.0.7".


    Ce qui ne m'étonne pas, puisque que 'pod search' indique que la dernière version est la 4.0.3.


  • Ah donc il y a 2 problèmes du coup. Bon ... j'ai pris leur répertoire et je l'ai collé sur mon projet je pense que ça ira comme ça du coup :/


  • AliGatorAliGator Membre, Modérateur
    Bah non pourquoi tu dis "il y a 2 problèmes du coup" ?

    Il n'y a qu'un seul problème, c'est que tu as mis dans ton Podfile que tu voulais RESideMenu version 4.0.7 alors que cette version n'existe pas, c'est tout, comme te l'a expliqué Céroce.
    Tu demandes une version >=4.0.7 alors qu'ils se sont arrêtés à  la 4.0.3, comment veux-tu dans ces conditions que CocoaPods t'installe une version 4.0.7 alors que ça n'existe pas ? Y'a rien de sorcier là  dedans.

    (Tu l'as inventé d'où d'ailleurs ce 4.0.7 ?)

    En bref, tu changes dans ton Podfile pour mettre une version qui existe (genre "~> 4.0") et puis c'est tout. Ou tu ne précises même pas de version et tu laisses CocoaPod te récupérer la dernière.
  • Am_MeAm_Me Membre
    septembre 2014 modifié #10

    Bah sur le site il donne cette ligne de commande je n'ai rien écris de mes propres mains :D simple copié collé du site.


    Bon bah je vais pour la 4.0.3


     


    Invention : 

  • La j'ai trouvé la version 4.0.6 perso 


    Mais j'ai une autre erreur 


     


    [!] Invalid `Podfile` file: /Users/monUserName/Documents/iOSApps/Podfile:6: unterminated string meets end of file


    /Users/monUserName/Documents/iOSApps: syntax error, unexpected end-of-input, expecting keyword_end. Updating CocoaPods might fix the issue.


     

    J'ai fait pod update toujours la même erreur mon fichier :

     



    # Uncomment this line to define a global platform for your project
    # platform :ios, "7.0"

    target "projet" do
    pod 'AFNetworking', '2.2.1'
    pod 'RESideMenu', '~> 4.0.6'
    end


    target "projetTests" do
    end



     


  • Donc oui au final tu avais raison je suis allé sur cocoaPods et il m'ont donné la ligne à  rajouter pod 'RESideMenu', '~> 4.0'


  • AliGatorAliGator Membre, Modérateur
    OK c'est un peu de la faute de l'auteur alors ^^

    En fait je viens de faire un pod search et la dernière version en date publiée sur CocoaPods est la 4.0.6. C'est pour ça que CocoaPods te dit qu'il ne peut pas installer de version 4.0.7 ou suppérieure, car CocoaPods ne connait pas de version plus haute que la 4.0.6 pour ce composant.

    Maintenant, il se trouve que l'auteur du composant a fait un commit il y a seulement 9h pour mettre à  jour son README.md et son fichier podspec dans son repo GIT pour passer la version de 4.0.6 à  4.0.7.

    Oui mais voilà , il vient tout juste de faire ça il y a 9h, donc il a localement changé la doc sur son repo GIT il y a 9h... mais il n'a pas encore poussé cette version sur CocoaPods, qui ne connait pas encore cette 4.0.7.
    Comme il y a 9h il était 22h30 à  San Francisco, ville dans laquelle l'auteur vit, il est probable qu'il ait fait ça hier soir mais voulait attendre d'être réveillé ce matin et de vérifier les derniers éléments avant de publier la version officiellement après une bonne nuit de sommeil :D Et comme il n'est encore que 7h30 à  SF, il ne va sans doute publier sur CocoaPods cette 4.0.7 seulement dans quelques heures.


    Bref de toute façon le plus propre quand tu spécifies une version d'un pod dans ton Podfile, c'est d'utiliser la notation "~> x.y" autrement dit si tu utilises l'opérateur "~>" de n'utiliser que 2 chiffres de version et pas 3. En effet, cet opérateur "~>" signifie "toute version suppérieure ou égale à  la version, mais où seul le dernier chiffre a le droit de grimper". Autrement dit "~> 1.2.3" veut dire "1.2.3 ou supérieur mais pas "1.3.x". Or vu les règles du semantic versionning, quand le premier chiffre (version majeure) change c'est que l'API a changé et que des méthodes ont été supprimées (donc ça ne sera pas compatible avec du code écrit pour une précédente version majeure), quand le 2ème chiffre change c'est que l'API s'est enrichie (nouvelles méthodes, mais les anciennes sont toujours présentes, donc ça restera compatible avec du code écrit pour les versions mineures précédentes), et quand le dernier chiffre change c'est que l'API n'a pas changé mais qu'il y a eu des corrections de bug. Or toi tu veux éviter que l'API ne soit plus compatible si jamais tu fais plus tard une mise à  jour de ton pod, pour pas avoir à  réécrire tout le code déjà  écrit pour une version 1.x.x et devoir l'adapter à  la nouvelle API 2.x.x, par contre ça te dérange pas qu'il y ait de nouvelles méthodes, ça ne rendra pas ton code incompatible. Donc tu ne veux pas changer de version majeure, mais veut bien évoluer dans les versions mineures. D'où le "~> x.y" plutôt que "~> x.y.z".
  • Ok parfait explication. Oui il n'est que 7h30 je pense qu'il dodo toujours.

  • AliGatorAliGator Membre, Modérateur
    septembre 2014 modifié #15

    La j'ai trouvé la version 4.0.6 perso 
    Mais j'ai une autre erreur 
     
    [!] Invalid `Podfile` file: /Users/monUserName/Documents/iOSApps/Podfile:6: unterminated string meets end of file
    /Users/monUserName/Documents/iOSApps: syntax error, unexpected end-of-input, expecting keyword_end. Updating CocoaPods might fix the issue.
     
    J'ai fait pod update toujours la même erreur mon fichier :
     
     

    # Uncomment this line to define a global platform for your project
    # platform :ios, "7.0"

    target "projet" do
    pod 'AFNetworking', '2.2.1'
    pod 'RESideMenu', '~> 4.0.6'
    end


    target "projetTests" do
    end


    Même la coloration syntaxique du forum te montre clairement où est l'erreur :D
    Sur le forum CocoaCafe, quand tu mets du code les chaà®nes sont colorées en vert et le reste en noir. Or tu vois que ça ne redevient pas noir sur ta ligne où tu écris "end".

    C'est parce que ta chaà®ne "~> 4.0.6" qui est sur la ligne 6 (comme te l'indique l'erreur, d'ailleurs) n'est pas terminée (comme... te l'indique l'erreur aussi, d'ailleurs).

    En effet tu n'as jamais mis de guillemet fermant pour indiquer la fin de ta chaà®ne. A la place tu as tapé quelque chose qui ressemble beaucoup certes à  un guillemet simple, mais qui n'en est pas un (si tu regardes bien c'est un apostrophe courbe et non tout droit). Remplace par le bon guillemet simple pour correctement fermer/terminer ta chaà®ne et tout rentrera dans l'ordre.

    ---

    D'ailleurs je ne sais pas ce que tu utilises comme Editeur de Texte, mais je te conseille pour tout ce qui est éditeur de texte brut comme les fichiers Podfile ou même le code de prendre un éditeur fait pour (Editeur de Texte et non Traitement de Texte ou Editeur de texte stylé, donc plutôt Xcode lui-même, ou SublimeText ou TextWrangler ou Strawberry ou Chocolat ou autre que TextEdit qui lui est orienté rédaction de texte stylé et pas de texte brut, et qui pourrait tout à  fait être du genre à  t'insérer un guillemet courbe quand tu tapes la touche guillemet "parce que ça fait plus joli dans ton texte" car il pense que tu tapes une lettre que tu vas imprimer, et pas du code)
  • Am_MeAm_Me Membre
    septembre 2014 modifié #16

    Oui mais la j'ai utilisé TextEdit. Sinon j'ai SublimeText. Je vais surement faire en sorte que tout .txt s'ouvre sur ST aussi


  • AliGatorAliGator Membre, Modérateur
    septembre 2014 modifié #17
    Bah voilà , donc TextEdit t'a mis un guillemet courbe sans rien te demander. C'est pour ça qu'il faut toujours utiliser un éditeur de texte quand on veut écrire un fichier texte brut, comme du code ou comme un script ou un Podfile etc.

    Et garder les logiciels comme TextEdit pour écrire des lettres ou du texte stylé (avec des polices, couleurs, etc), mais pas pour du code/texte interprété. C'est comme Word qui à  chaque fois que tu tapes un guillemet t'insère un guillemet en chevrons ouvrant (") ou fermant (") plutôt qu'un guillemet double droit (").

    Donc oui je te conseille de configurer pour que tout .txt s'ouvre avec SublimeText. Pour les Podfile, comme ils n'ont pas d'extension je ne pense pas que tu pourras systématiquement tous les associer à  SublimeText, mais il faut prendre du coup l'habitude de faire un clic droit dessus et de choisis Ouvrir avec > SublimeText (quitte à  maintenir la touche "Alt" enfoncée quand tu fais ça pour que dans le menu contextuel le "Ouvrir avec" se transforme en "Toujours ouvrir avec")
Connectez-vous ou Inscrivez-vous pour répondre.