Bouger un carre dans une NSView
Core
Membre
bonjour,
je dessine dans une NSView un carre avec ces lignes de code :
il se dessine pas de probleme
Maintenant j'aimerais le faire bouger sur la gauche de 20 pixels via une IBAction, nommée moveLeft par exemple, correspondant à un bouton sur une barre d'outils. J'ai essayé quelques trucs mais rien n'y fait ca ne bouge pas ! Alors si quelqu'un pouvait m'aider...merci d'avance
je dessine dans une NSView un carre avec ces lignes de code :
<br />- (void)drawRect:(NSRect)rect<br />{<br />NSRect curseur = NSMakeRect(x+0.5,y+0.5,10,10);<br />[[NSColor redColor] set];<br />[NSBezierPath strokeRect:curseur]; <br />}<br />
il se dessine pas de probleme
Maintenant j'aimerais le faire bouger sur la gauche de 20 pixels via une IBAction, nommée moveLeft par exemple, correspondant à un bouton sur une barre d'outils. J'ai essayé quelques trucs mais rien n'y fait ca ne bouge pas ! Alors si quelqu'un pouvait m'aider...merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
tu as bien mis un display dans le moveLeft de ta view ?
Voici mon code :
L'IBAction fonctionne car la fentre de log affiche bien "action!"
Mais le carre ne bouge pas !!??
J'ai donc fait un petit test en rajoutant un if dans la methode Drawrect et un test = 1 dans moveLeft
rien ne se dessine, meme apres avoir appuyer sur le bouton reliée à l'action moveLeft. Il semble donc que la methode drawRect ne soit pas invoquée par mon display et/ou setNeedsDisplay:YES
Si quelqu'un peut m'expliquer comment rafraichir la NSVIew, merci d'avance !
1. Essaye de faire un NSLog(NSStringFromRect(curseur)); dans le drawRect et regarde si le rectangle affiché a les bonnes coordonnées.
2. Le 0 en cocoa est en bas à gauche (généralement il est en haut gauche), est-ce que le bas de ta vue n'est par exemple pas masqué par autre chose?
D'abord ce que je ferais, c'est de mettre tes variables x et y en global dans ton interfaçage, car la c'est pas propre de mettre ca en début d'implémentation et le problème vient peut-être de là ...
Insère aussi un NSLog dans drawRect pour surveiller ta variable et vérifier du meme coup si la méthode est bien appelée...
[EDIT] Zut, grilled par Renaud
peut etre je fais quelque chose de faux dans IB :
Dans interface builder je :
_ je cree une classe qui hérite de NSView
_ je glisse une NSView dans la fenetre
_ je fais Custom Class et je choisi la classe que je viens de creer
_ j'ajoute une action moveLeft à lo classe que je viens de creer
_ je crée une instance de classe
_ je dispose un bouton que je connecte a cette instance avec l'action moveLeft
après dans X Code je mets le code vu ci dessus
et le carré ne bouge pas !
> à Eddy58, j'ai placé float x et float y en variable d'instance dans mon .h, est ce mieux ?
Merci pour votre soutien !
Voilà ton erreur !
En fait, tu as crée 2 objets de ta classe. L'un est utilisé dans la fenêtre dans laquelle tu as glissé la custom view, l'autre est celui créé quand tu instancies ta classe. Or cette seconde view n'est reliée à aucune fenêtre, donc elle n'est pas visible.
Aussi, comme l'action de ton bouton est relié à la seconde view (celle qui n'est pas visible), tu ne modifies les x et y que de cette view, et non celle de la première (la visible dans la fenêtre).
Passe plutôt par un contrôleur pour lier ton curseur à ta view (la première).
.
Y a pas un moyen de faire un flip pour avoir le 0 en haut à gauche ?
Sinon mon carre se deplace correctement merci à vous tous !!
Si.
Dans ta custom view, implémente cette méthode :
.
ce forum est genial !!!!
C'est pas juste une question de rapidité Alex.
Je sais bien que toi t'avais la réponse et que t'as juste été grillé par Bru
Mais de mon côté je viens encore d'apprendre quelque chose dont je n'aurais jamais osé pensé l'existence !
Merci Bru