Simulateur IOS et UIGestureRecognizer

Bonjour à  tous,



je me heurte à  un problème basique et sans doute assez idiot, mais malgré toutes mes tentatives et recherches, je n'arrive pas à  simuler les gestureRecognizer sur le simulateur. A moins que ce soit que je n'arrive pas à  les intercepter, mais je doute. J'ai essayé un test tout simple en le créant dans le NIB, avec delegate et selector correctement connectés. Je teste toutes les combinaisons de touches possible, je ne viens jamais dans mon sélecteur....



Si vous avez des pistes je suis preneuse.



D'avance, merci.

Réponses

  • Difficile à  voir comme ça surtout si tu as essayé pleins de trucs.

    Peut-être qu'en partageant ton "test tout simple" ... ?


  • Merci de ta réponse. Voici un de mes essais.








    Dans le .h


    UIPanGestureRecognizer* moveImage;






    Dans le .m qui est une UIView




    -(UIPanGestureRecognizer*)moveImage;


    {

    if (moveImage == Nil)

    {

    moveImage = [color=#733ea4]UIPanGestureRecognizer[/color] [color=#401f7d]alloc[/color initWithTarget:self action:@selector(pan:)];

    }

    return moveImage;


    }



    -(void)setMoveImage:(UIPanGestureRecognizer*)aMoveImage;

    {

    moveImage = aMoveImage;

    }





    - (void)pan:(UIPanGestureRecognizer *)gesture;


    {

    NSLog(@OK, je passe);


    if ((gesture.state == UIGestureRecognizerStateChanged) ||


    (gesture.state == UIGestureRecognizerStateEnded)) {


    CGPoint location = [gesture locationInView:color=#be299d]self[/color] [color=#401f7d]superview[/color];

    [self setCenter:location];

    }

    }
  • Et bah voilà , c'est plus simple pour t'aider.

    Il faut que tu ajoute le gesture recognizer à  ta vue (ici self il me semble)


    <br />
    -(UIPanGestureRecognizer*)moveImage;<br />
    {<br />
        if (moveImage == Nil)<br />
        {<br />
    	    moveImage = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];<br />
    	    [self addGestureRecognizer:moveImage];<br />
        }<br />
        return moveImage;<br />
    }<br />
    
  • KubernanKubernan Membre
    avril 2012 modifié #5
    N'aurais-tu pas oublié d'attacher ta gesture à  ta view (addGestureRecognizer:) ?



    [edit] Grilled par JegnuX à  la minute près :-)
  • AliGatorAliGator Membre, Modérateur
    Et au passage ta gestion mémoire est juste une horreur (leaks de partout, surtout sur le setter)
  • 'AliGator' a écrit:


    Et au passage ta gestion mémoire est juste une horreur (leaks de partout, surtout sur le setter)




    ARC ?
  • AliGatorAliGator Membre, Modérateur
    Si ARC alors pourquoi faire un setter ?
  • 'AliGator' a écrit:


    Si ARC alors pourquoi faire un setter ?




    Pour le modifier depuis l'exterieur de la classe ?
  • CeetixCeetix Membre
    avril 2012 modifié #10
    Parce que s'il débute je pense qu'il va faire comme en Java par exemple ...

    Bref ce serait vraiment cool qu'il y ai une case ARC or not quand on post un morceau de code. Non ?



    @Jegnux : ouai aussi ^^
  • BooleanneBooleanne Membre
    avril 2012 modifié #11
    Merci pour toutes vos réponses. Je n'ai pas réagi rapidement parce que je ne reçois pas les alertes mail...



    Bon, je vais essayer de répondre à  chacun.



    JegnuX et Kuberman ok, bien reçu, il manque en effet le Add. Merci à  vous deux.



    Pour les autres : désolée, en effet, pas précisé. J'ai choisi ARC à  la base, donc normal qu'il n'y ait pas de release. Je fais des setters pour mieux maitriser mes variables du coup, et il me semble à  plus forte raison avec ARC, ça me permet de réallouer si l'objet est inexistant et de limiter le risque d'erreurs.



    C'est vrai, je débute, alors, je ne fais pas forcément les meilleurs choix et je ne sais pas toujours bien expliquer mes problèmes.



    Vous m'avez bien éclairée. Merci à  tous. Je vais retenter.



    Edit : Ok, super, ça marche maintenant. Mille fois merci.
  • 'Booleanne' a écrit:


    Je fais des setters pour mieux maitriser mes variables du coup, et il me semble à  plus forte raison avec ARC, ça me permet de réallouer si l'objet est inexistant et de limiter le risque d'erreurs.




    Non non ce dont tu parles c'est le design pattern "Lazy loading" je pense, qui permet effectivement d'initialiser "automatiquement" un objet et de l'associer à  ta variable la première fois que tu appelleras ton getter [font=helvetica, arial, sans-serif]-([/font][font=helvetica, arial, sans-serif]UIPanGestureRecognizer[/font][font=helvetica, arial, sans-serif]*)moveImage;[/font]

    Le setter est justement l'autre méthode qui va avec ton getter : [font=helvetica, arial, sans-serif]-([/font][font=helvetica, arial, sans-serif]void[/font][font=helvetica, arial, sans-serif])setMoveImage:([/font][font=helvetica, arial, sans-serif]UIPanGestureRecognizer[/font][font=helvetica, arial, sans-serif]*)aMoveImage[/font]
  • 'JegnuX' a écrit:


    Non non ce dont tu parles c'est le design pattern "Lazy loading" je pense, qui permet effectivement d'initialiser "automatiquement" un objet et de l'associer à  ta variable la première fois que tu appelleras ton getter [font=helvetica, arial, sans-serif]-([/font][font=helvetica, arial, sans-serif]UIPanGestureRecognizer[/font][font=helvetica, arial, sans-serif]*)moveImage;[/font]

    Le setter est justement l'autre méthode qui va avec ton getter : [font=helvetica, arial, sans-serif]-([/font][font=helvetica, arial, sans-serif]void[/font][font=helvetica, arial, sans-serif])setMoveImage:([/font][font=helvetica, arial, sans-serif]UIPanGestureRecognizer[/font][font=helvetica, arial, sans-serif]*)aMoveImage[/font]




    Oui, je me suis un peu embrouillée, là . Je fais un setter parce que je fais un getter... pour allouer mon objet. Et aussi pour pouvoir modifier mes variables de n'importe où.
  • Si tu utilises la directive @synthesize tu n'a pas besoin - tel qu'on le voit ici - d'écrire ton setter. Le compilateur s'en chargera.

    Son écriture ici pose question car il ne fait rien de particulier de plus que ce qu'il est censé faire par défaut (en ARC).



    Tu peux donc te passer d'écrire toi même le setter, ça n'a rien à  voir avec le fait d'avoir un getter ou de pouvoir modifier tes variables de n'importe où.
  • AliGatorAliGator Membre, Modérateur
    Même avec ARC et donc même sans le release de la valeur précédente et le retain de la nouvelle, le setter fait plus que ça :

    - Assignation atomique pour le rendre thread-safe, à  moins de préciser que la propriété est nonatomic

    - Déclenchement du KVO
  • 'Kubernan' a écrit:


    Si tu utilises la directive @synthesize tu n'a pas besoin - tel qu'on le voit ici - d'écrire ton setter. Le compilateur s'en chargera.

    Son écriture ici pose question car il ne fait rien de particulier de plus que ce qu'il est censé faire par défaut (en ARC).



    Tu peux donc te passer d'écrire toi même le setter, ça n'a rien à  voir avec le fait d'avoir un getter ou de pouvoir modifier tes variables de n'importe où.




    Ok, je croyais que Getter Setter marchaient par paire. Cela dit, cela permet de garder la main sur certains cas de variables.



    Aligator, pour ta réponse, je n'ai pas tout compris... Je viens juste d'arriver, moi... Je vais essayer de décoder. Pour le moment, pas mal de termes sont encore du chinois pour moi. Du coup, tu viens de m'éclaircir sur un truc, l'assignation atomique.



    Merci à  vous.
  • Plus d'info ici.
Connectez-vous ou Inscrivez-vous pour répondre.