Afficher un nouveau points à chaque click
ApheloManis
Membre
Bonjour à nouveau,
En suivent vos conseilles, j'avance très biens Je parviens enfin à comprendre le fonctionnement d'une POO !
Cependant, depuis hier j'ai du mal à comprendre pourquoi rien ne s'affiche à l'endroit du click. Pourtant un nouvel objet Dot est créé à chaque click ?
La classe MouseAction est liée avec le Customer View dans mon fichier xib.
// MouseAction.h
#import "Dot.h"
@interface MouseAction : NSView {
Dot *dot
NSPoint actuallyPosition;
}
// MouseAction.m
- (void)mouseDown:(NSEvent *)theEvent{
[self setPosition:theEvent];
[self makeDot];
}
- (void)makeDot{
createDot = [[Dot alloc] init];
createDot.coordinate = actuallyPosition;
createDot.needsDisplay = YES;
}
// Dot.m
@synthesize coordinate;
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSBezierPath* ovalPath = [NSBezierPath bezierPathWithOvalInRect: NSMakeRect(coordinate.x, coordinate.y, 5, 5)];
[NSColor.blueColor setStroke];
[ovalPath setLineWidth: 2];
[ovalPath stroke];
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Deux remarques :
1°/ je n'ai jamais vu cette méthode "coordinate". En fait, on utilise plutôt la @property frame.
La @property frame donne l'origine d'une vue dans sa vue parente et la taille de ta vue.
D'ailleurs j'ai bien l'impression que ta vue Dot a une taille nulle !!!
Donc, ce sera un point à régler pour toi.
2°/ Ta méthode makeDot crée un point mais ne le met nulle part ! Tu lui donnes des coordonnées, mais tu ne lui dis pas dans quel système. En fait, tu vas devoir dire que ta vue Dot est une sous-vue de ta vue principale !
Essaie:
Attention à tes choix de nom : createDot est pas génial !
Ici, setNeedsDisplay ne sert à rien.
Les coordonnées de la souris se récupèrent dans NSEvent.locationInWindow.
Comme le nom l'indique, il faut convertir les coordonnées dans le système de coordonnées de la vue, en utilisant les méthodes -convert... de NSView.