2017-06-29 3 views
0

question Débutant:Swift 3/macOS: Fenêtre ouverte sur certains écran

Je travaille sur une application macOS avec Xcode 8.3.3 actuelle et swift3. J'utilise MASShortcut pour ouvrir une fenêtre par un raccourci qui a été caché par le démarrage.

J'utilise le code suivant sur l'événement raccourci:

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

Pour plusieurs écrans (j'ai deux écrans externes attachés à mon MacBook), je veux spécifier l'écran où la fenêtre apparaît. Je sais qu'il y a NSScreen.screens() qui restitue tous les écrans disponibles. Mais comment l'utiliser pour laisser ma fenêtre apparaître à l'écran 1/2/3?

Merci beaucoup!

Edit: Résolu avec la réponse de @ michael-doltermann:

je peux itérer sur NSScreen.screens() et l'accès par exemple le MIDX/Midy coords pour créer une instance NSPoint pour remplacer ma fenêtre.

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

Répondre

1

Chaque écran de NSScreen.screens() a une propriété visibleFrame qui vous indique le rectangle d'image global.

Vous pouvez ensuite définir l'origine de votre fenêtre pour l'adapter à l'intérieur des coordonnées du cadre de l'écran de votre choix. Les réponses Objective-C peuvent être vues here et here. Cela signifie que vous devez écrire du code pour spécifier la fenêtre préférée. Dans mon application, je prends les rectangles globaux de trame pour chaque écran et puis échelle chemin vers le bas dans un NSView pour afficher quelque chose qui ressemble à des moniteurs de volet Préférences Système:

Set Video Preferences

+0

Merci! Je l'ai eu. Je peux itérer sur NSScreen.screens() et accéder par exemple aux coords midX/midY pour créer une instance NSPoint pour remplacer ma fenêtre. var pos = NSPoint() pos.x = NSScreen.screens()! [MYIndex] .visibleFrame.midX) pos.y = NSScreen.screens()! [MYIndex] .visibleFrame.midY) self.window ? .setFrameOrigin (pos) – Kim