Ich arbeite an einer OS X-Anwendung, die benutzerdefinierte Fenster in allen verfügbaren Räumen aller angeschlossenen Displays anzeigt. Ich kann ein Array der verfügbaren Anzeigeobjekte abrufen, indem ich [NSScreen-Bildschirme] aufrufen.
Was ich momentan vermisse, ist eine Möglichkeit zu sagen, ob der Benutzer eine Anzeige mit einem Bildschirm verbindet oder einen Bildschirm von seinem System trennt.
Ich habe die Cocoa-Dokumentation nach Benachrichtigungen durchsucht, die sich ohne viel Glück mit einem solchen Szenario befassen, und ich weigere mich, zu glauben, dass es keine Systembenachrichtigung gibt, die beim Ändern der Anzahl der mit dem System verbundenen Bildschirme gepostet wird .
Irgendwelche Vorschläge zur Lösung dieses Problems?
Es gibt mehrere Möglichkeiten, das zu erreichen:
Sie könnten implementieren applicationDidChangeScreenParameters: in Ihrem App-Delegaten (die Methode ist Teil von NSApplicationDelegateProtocol
).
Eine andere Möglichkeit besteht darin, nach dem NSApplicationDidChangeScreenParametersNotification
zu suchen, das vom Standard-Benachrichtigungscenter [NSNotificationCenter defaultCenter]
gesendet wurde.
Immer wenn Ihre Delegiertenmethode aufgerufen wird oder Sie die Benachrichtigung erhalten, können Sie über [NSScreen screens]
iterieren und sehen, ob eine Anzeige verbunden oder entfernt wurde (Sie müssen eine Anzeigeliste pflegen, die Sie beim Programmstart überprüfen können).
Ein Nicht-Cocoa-Ansatz wäre über Core Graphics Display-Dienste:
Sie müssen eine Rekonfigurationsfunktion implementieren und sie mit CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack cb, void* obj);
In Ihrer Rekonfigurationsfunktion können Sie den Status der betroffenen Anzeige abfragen. Zum Beispiel:
%Vor%Tags und Links objective-c cocoa