Afficher un nouveau points à  chaque click

ApheloManisApheloManis Membre
février 2015 modifié dans API AppKit #1

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];
}

Réponses

  • colas_colas_ Membre
    février 2015 modifié #2

    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:



    - (void)makeDot{
    newDot = [[Dot alloc] init];
    newDot t.center = actuallyPosition;
    [mainView addSubview:newDot]
    }

    Attention à  tes choix de nom : createDot est pas génial !


     


    Ici, setNeedsDisplay ne sert à  rien.


  • CéroceCéroce Membre, Modérateur

    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.


Connectez-vous ou Inscrivez-vous pour répondre.