Was tun lockFocus und unlockFocus eigentlich tun?
Warnung: ich bin ein Kakao Neuling.
Bin ich beim Lesen von "Cocoa Programmierung Für Mac OS X" von Hillegass.
P.301 es ist geschrieben:
Machen die Zeichnung auf dem Bild erscheinen statt auf dem Bildschirm, müssen Sie zuerst sperren Sie den Fokus auf das Bild. Wenn die Zeichnung abgeschlossen ist, entsperren Sie den Fokus.
Den code habe ich, innerhalb -(void)mouseDragged:(NSEvent *)theEvent
einer NSView
ist wie folgt:
[resizedImage lockFocus];
[sourceImage drawInRect: NSMakeRect(0, 0, resizeWidth, resizeHeight) fromRect: NSMakeRect(0, 0, originalSize.width, originalSize.height) operation: NSCompositeSourceOver fraction: 1.0];
[resizedImage unlockFocus];
Ohne die sperren/entsperren, funktioniert das nicht, aber ich verstehe immer noch nicht genau, was Los ist.
Sehe ich, dass die 2. Zeile des Codes hat keine Erwähnung von resizedImage
so bedeutet das, dass wenn ich lockFocus
es stellt sicher, dass alle 'Zeichnung', die geschieht, die dort stattfindet? Könnte mir jemand erklären das besser?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zeichnung erfordert einen Grafik-Kontext'. Sie werden bemerken, dass, im Gegensatz zu Core-Grafik, keine der AppKit-Zeichnung Methoden ein parameter, der angibt, wo die Zeichnung endet. Stattdessen wird das Ziel gespeichert ist weltweit als
[NSGraphicsContext currentContext]
. Alle AppKit Zeichenmethoden beeinflussen den aktuellen Kontext.Den Hauptzweck der
-lockFocus
(auf Bilder und Ansichten gleichermaßen) ist die Einrichtung der Grafik-Kontext, so dass Ihre Zeichnung landet, wo Sie es wollen.drawRect:
(die läuft in zwischenlockFocus
undunlockFocus
zur Ansicht).Aus der docs für
-[NSImage lockFocus]
:So existiert ein offscreen-Fenster, die Sie zeichnen auf, wenn Sie beim zeichnen auf das Bild. Dieses Bild hat einen Grafik-Kontext und
lockFocus
macht diesem Kontext die aktuelle Zeichnung-Kontext, so dassdrawInRect:...
nutzt es für seine Zeichnung. Es ist ähnlich wie+[NSGraphicsContext setCurrentContext]
.