Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Punkte und Größen

Wenn man beginnt, sich mit dem Zeichnen von Objekten auseinanderzusetzen, stößt man sehr schnell auf Datenstrukturen, die man bei der restlichen Programmierung eher selten benötigt. Dies sind Punkte, Größen und Rechtecke.

Ein Punkt, abgebildet durch die Struktur NSPoint, ist relativ einfach erklärt. Dabei handelt es sich um zwei float-Werte für Positionen auf der X und Y Achse. Mit einem NSPoint kann man daher jede Position im zweidimensionalen Raum beschreiben.
NSPoint aPoint = NSMakePoint(45.2, 72.5);

NSLog(
@"X-Position: %f",aPoint.x);
NSLog(
@"Y-Position: %f",aPoint.y);
Natürlich kann man einen Punkt auch ohne den Aufruf von NSMakePoint erstellen, da sich nur eine ganz einfache Struktur dahinter verbirgt. Auch den einzelnen Achsen direkt Werte zuzuweisen ist möglich.
aPoint.x = 10.50;
aPoint.y =
20.30;
Wenn man sich den Code von NSMakePoint ansieht, wird schnell klar, was hier wirklich passiert.
NS_INLINE NSPoint NSMakePoint(CGFloat x, CGFloat y) {
    NSPoint p;
    p.x = x;
    p.y = y;
    return p;
}
Ein einzelner Punkt im Raum beschreibt zwar eine Position, aber noch kein Objekt. Da jedes Objekt aber in der Regel eine Höhe und eine Breite hat, kommt eine zweite Struktur zum Einsatz: NSSize.
NSSize aSize = NSMakeSize(99.99, 25.6);

NSLog(
@"Breite: %f",aSize.width);
NSLog(
@"Höhe: %f",aSize.height);
Auch NSSize kapselt zwei float-Werte. In diesem Fall sind es Informationen für Breite und Höhe.
Mit einem Punkt und den Angaben der Größe, kann man ein Objekt und seine Position perfekt beschreiben. Eine weitere Struktur fasst die beiden Eigenschaften zusammen. Es ist NSRect, ein Rechteck.
In anderen Programmiersprachen ist es durchaus üblich, ein Rechteck durch zwei Punkte zu beschreiben, hier aber sind es wirklich nur der Startpunkt, sowie Höhen- und Breitenangaben.
NSRect aRect = NSMakeRect(5.0, 4.0, 20, 30);

NSLog(
@"X-Position: %f" ,aRect.origin.x);
NSLog(
@"Y-Position: %f" ,aRect.origin.y);
NSLog(
@"Breite: %f",aRect.size.width);
NSLog(
@"Höhe: %f" ,aRect.size.height);
Die Reihenfolge der Parameter bei NSMakeRect ist übrigens x, y, Breite, Höhe.

Ein weiterer Typ, den man bei der Programmierung benötigt, ist NSColor, welcher verwendet wird, um Farbinformationen zu speichern. Im Unterschied zu NSPoint und NSSize ist NSColor aber wieder ein richtiges Objekt.
NSColor *aColor;
aColor = [NSColor colorWithDeviceRed:
1.0 green:0.0 blue:0.0 alpha:1.0];
Diese Anweisungen erzeugen eine rote Farbe für den RGB Farbraum, also für die Darstellung auf dem Monitor. Es gibt durchaus andere Farbräume, wie CMYK, aber im Moment soll RGB genügen. Wie Sie sehen können, werden die einzelnen Farbanteile von Rot, Grün und Blau separat festgelegt. Alpha bestimmt die Transparenz der Farbe, wobei ein Wert von 1.0 keine Transparenz bedeutet.

Diese etwas langwierige Zuweisung kann man aber auch abkürzen, indem man sich der vordefinierten Farben bedient. Für den Fall einer roten Farbe sähe die Anweisung wie folgt aus.
NSColor *aColor = [NSColor redColor];
Es gibt einige solcher Definitionen für die gängigsten Farben. Benötigen Sie allerdings eine spezielle Farbe, müssen Sie die einzelnen Anteile wieder selber mischen.

Nach dieser kleinen Einführung sind Ihnen die wichtigsten Datentypen bekannt und auf der nächsten Seite werden Sie erfahren, wie Sie wirklich Objekte auf den Bildschirm zeichnen.

nächste Seite