2012-05-26 13 views
6

Ich würde gerne benachrichtigt werden, wenn eine bestimmte NSView 's - (NSRect)visibleRect ändert, weil ich einige Phantasie subview Layout basierend auf der sichtbaren rect machen will. Ehrlich gesagt, gerade jetzt bin ich ratlos; -visibleRect gibt keine KVO-Benachrichtigungen aus (was sinnvoll ist), und es scheint keine Möglichkeit zu geben, herauszufinden, ob sich das sichtbare Rect geändert hat oder nicht, ohne explizit -visibleRect aufzurufen.Ist es möglich zu beobachten -visibleRect

Ist das überhaupt möglich? (oder ist es eine schreckliche, schreckliche Idee?)

+1

überschreiben Warum die minus 1? – Vervious

Antwort

6

Ich denke, dass Sie entweder -[NSView updateTrackingAreas] überschreiben oder für hören können. Das kann öfter vorkommen als nur eine Veränderung des sichtbaren Rechtecks, aber sie sollten bei jedem Wechsel des sichtbaren Rechtecks ​​passieren. Ich denke.

Das gesagt, kann es eine schreckliche Idee sein. Schwer zu wissen. :)

+0

Durchführbar, danke. – Vervious

+0

Gute Frage und Antwort. Diese Antwort half mir aus einem anderen Problem, mit dem ich konfrontiert war, aber ich habe auch diese Frage. Und für diese Frage würde ich diese Antwort abstimmen, aber nicht akzeptieren. – trss

+0

Die Dokumentation für 'updateTrackingAreas' lautet:" Wird automatisch aufgerufen, wenn sich die Geometrie der Ansicht so ändert, dass ihre Tracking-Bereiche neu berechnet werden müssen. " aber es ist nicht klar, was die Geometrie der Ansicht bedeutet. Es gibt ein Thema in View Geometry, aber das erklärt nur Grenzen und Rahmen. Es erklärt visibleRect, aber es nennt es nicht die Geometrie der Ansicht. – trss

1

Eine weitere Option post 10.5 ist die Methode -viewWillDraw, die aufgerufen wird, kurz bevor die Ansicht (und ihre Untersichten) gezeichnet wird. Sie können das sichtbare Rechteck der Ansicht abrufen und das Layout ausführen, bevor Sie [super viewWillDraw] aufrufen.

0

Ken's Vorschläge für das Verfolgen der Tracking-Bereich Änderungen fühlt sich hacky aber scheint zu arbeiten, obwohl sie erst auslösen, nachdem die Größenänderung abgeschlossen ist. Wenn Sie während der Größenanpassung Updates benötigen, wie ich es getan habe, wird es