2017-06-29 4 views
0

Anfänger Frage:Swift 3/macOS: Öffnen Sie das Fenster auf bestimmten Bildschirm

Ich arbeite an einem macOS App mit aktuellen Xcode 8.3.3 und swift3. Ich benutze MASShortcut, um ein Fenster mit einer Verknüpfung zu öffnen, die beim Hochfahren ausgeblendet wurde.

Ich verwende den folgenden Code im Kontextereignis:

NSApplication.shared().windows.last!.makeKeyAndOrderFront(nil) 
NSApplication.shared().activate(ignoringOtherApps: true) 

Für mehrere Monitor-Setups (Ich habe zwei externe Displays auf meinem MacBook angeschlossen ist), ich möchte den Bildschirm angeben, wo das Fenster sich öffnet. Ich weiß, dass es NSScreen.screens() gibt, die alle verfügbaren Bildschirme zurückgibt. Aber wie benutze ich es, um mein Fenster auf dem Bildschirm 1/2/3 erscheinen zu lassen?

Vielen Dank!

Edit: Gelöst mit der Antwort von @ michael-doltermann:

Ich kann NSScreen.screens iterieren() und Zugang zum Beispiel der MIDX/MIDY coords eine NSPoint Instanz erstellen mein Fenster zu ersetzen.

var pos = NSPoint() 
pos.x = NSScreen.screens()![myIndex].visibleFrame.midX) 
pos.y = NSScreen.screens()![myIndex].visibleFrame.midY) 
self.window?.setFrameOrigin(pos) 

Antwort

1

Jeder Bildschirm von NSScreen.screens() hat eine visibleFrame Eigenschaft, dass Sie den globalen Rahmen Rechteck erzählt.

Sie können dann Ihren Fensterursprung so einstellen, dass er in den Rahmen der Koordinaten des gewünschten Bildschirms passt. Objective-C Antworten können here und here gesehen werden.

Dies bedeutet, dass Sie einen Code schreiben müssen, um das bevorzugte Fenster anzugeben. In meiner eigenen App, nehme ich die globale Rahmenrechtecke für jeden Bildschirm und dann skalieren Weg nach unten in eine NSView etwas anzuzeigen, dass die Monitore Bereich von Systemeinstellungen wie folgt aussieht:

Set Video Preferences

+0

Thank you! Ich habe es. Ich kann über NSScreen.screens() iterieren und z. B. auf die MidX/MidY-Coords zugreifen, um eine NSPoint-Instanz zu erstellen, die mein Fenster ersetzt. var pos = NSPoint() pos.x = NSScreen.screens (!) [MyIndex] .visibleFrame.midX) pos.y = NSScreen.screens (!) [MyIndex] .visibleFrame.midY) self.window ? .setFrameOrigin (pos) – Kim

Verwandte Themen