Was ist der bevorzugte / empfohlene Weg, um eine Linie in NSView-drawRect: Methode zu zeichnen?

7

Ich konnte in Cocoa auf NSView-Ebene kein primäres Linienzeichnungselement finden. Das einzige, was ich gefunden habe, ist NSBezierPath . Ist das ein bevorzugter Weg? Oder gibt es einen anderen Weg, den ich nicht entdecken könnte?

    
Eonil 07.05.2011, 04:20
quelle

4 Antworten

13

NSBezierPath ist genau das, was Sie verwenden sollten. Wenn Sie nur eine gerade Linie von einem Punkt zu einem anderen zeichnen möchten, verwenden Sie die Klassenmethode:

+strokeLineFromPoint:(NSPoint)point1 toPoint:(NSPoint)point2

    
Rob Keniger 08.05.2011 07:52
quelle
7

Cocoa verwendet einen impliziten Zeichnungsstapel und ein Ungültigkeitsmodell. Wenn in Ihrem NSView der Zustand geändert wird, der dazu führen würde, dass die Ansicht anders gezeichnet wird, rufen Sie - [self setNeedsDisplay:] auf, um dem Zeichensystem mitzuteilen, dass Sie neu gezeichnet werden müssen. Zu einem Zeitpunkt in sehr naher Zukunft, eigentlich das Ende der aktuellen Ereignisschleife, wird die drawRect: -Methode Ihrer Ansicht aufgerufen. Das ist deine Gelegenheit, alles zu zeichnen, was du möchtest.

Es gibt einen impliziten Fokus-Stack, was bedeutet, dass beim Aufruf des DrawRect: Ihrer Ansicht das Zeichnen auf die Grenzen Ihrer Ansicht in dem Fenster, in dem es sich befindet, fokussiert und abgeschnitten wird. Sie können dann Funktionen wie [[NSColor redColor] setzen ]; und NSRectFill ([selbst gebunden]);

Hier ist ein Beispiel:

%Vor%

Die Ansicht sollte eine diagonale Linie zeichnen, und bei jedem Klicken sollte die Linie die Farbe ändern.

    
Jon Hess 07.05.2011 19:13
quelle
2

Ich habe das Beispiel von Jon ausprobiert und festgestellt, dass ich dem obigen Codebeispiel zwei kleine Korrekturen hinzufügen musste.

  1. fügen Sie einen Zuordner des NSColor in den init-Block
  2. ein
  3. Ändern Sie den zweiten moveToPoint so, dass er zu einem lineToPoint
  4. wird

Sobald ich das behoben habe, fand ich den Code snippit sehr nützlich. HINWEIS: Sie müssen wahrscheinlich auch den NSColor freigeben.

%Vor%     
Ben 20.05.2011 22:01
quelle
1

Nur um einige Informationen hinzuzufügen, mache ich es mir zur Gewohnheit, sicherzustellen, dass der Grafikzustand vor und nach dem Zeichnen gespeichert und wiederhergestellt wird, um die Dinge flüssig zu halten.

%Vor%     
Adrian Sluyters 29.05.2015 10:59
quelle

Tags und Links