是否可以迭代OSX中任何应用程序的所有打开窗口并在Swift中监听其调整大小事件?我想创建自定义窗口管理器,根据用户行为移动和调整事件大小 - 因此,如果用户调整窗口大小,其他窗口将自动重新排列。
我是Haskell,而不是Swift开发人员,所以对于任何显示如何实现此效果的代码段/示例我都非常重要。 (事实上,我将它用作一种Haskell - > Cocoa绑定。)
修改 我也非常有兴趣在Objective-C中找到解决方案,但Swift对我来说更重要。
答案 0 :(得分:7)
是否可以迭代OSX中任何应用程序的所有打开窗口并在Swift中监听其调整大小事件?
可以这样做,更好的方法是让自定义窗口管理器类实现NSWindowDelegate协议,并将所有窗口delegate设置为自定义窗口管理器。这将为您提供所需的所有调整大小和移动信息。
我是Haskell,而不是Swift开发人员,所以对于任何显示如何实现此效果的代码段/示例我都非常重要。
实施协议方法:
class CustomWindowManager: NSWindowController, NSWindowDelegate {
// Resize Methods
func windowWillResize(sender: NSWindow,toSize frameSize: NSSize) -> NSSize {
// Your code goes here
}
func windowDidResize(notification: NSNotification) {
// Your code goes here
}
}
然后您可以选择要实现的协议方法,因为协议中的所有方法都是可选的。
您必须能够识别哪个窗口正在调用委托方法并跟踪任何窗口您移动或调整大小,因为对初始窗口更改做出了反应。有关此问题,请参阅此Stack Overflow question。
要获取当前屏幕上所有窗口的列表,请参阅此Stack Overflow question。
要获取当前屏幕上 您的应用 的所有窗口的列表,请参阅此Stack Overflow question。
答案 1 :(得分:2)
第一步,你应该添加NSWindowDelegate和函数windowWillResize,完整代码如下:
Igors-MacBook-Air:wxFork igorkorot$ git remote show origin
* remote origin
Fetch URL: https://github.com/oneeyeman1/wxwidgets.git
Push URL: https://github.com/oneeyeman1/wxwidgets.git
HEAD branch: master
Remote branches:
AUTOCONF_ARCHIVE tracked
BAKEFILE tracked
BAKEFILE_BRANCH tracked
CPPUNIT tracked
EXPAT tracked
GSTREAMER tracked
GTK1 tracked
GTK2 tracked
LIBPNG tracked
NEW_TBAR tracked
PKG_CONFIG tracked
RXSPENCER tracked
SDL tracked
SOC2006_RTL tracked
SOC2006_SOCKETS tracked
SOC2007_DVC tracked
SOC2007_WXWEB tracked
SOC2007_XTI tracked
SOC2008_WXWALLCTRL tracked
SOC2009_AUI tracked
SOC2009_FSWATCHER tracked
SOC2009_RIBBON tracked
SOC2010_GUI_TEST tracked
SOC2010_MASKED_CTRL tracked
SOC2010_RTC_IMAGES tracked
SOC2010_WIN7_UI tracked
SOC2011_ANIMATION tracked
SOC2011_GTK3 tracked
SOC2011_WEBVIEW tracked
SOC2011_WXIOS tracked
SOC2014_QT tracked
SOC2014_TASKBAR tracked
WXSTANDALONE_EXPERIMENT tracked
WX_2_0_FIXES tracked
WX_2_10_BRANCH tracked
WX_2_2_BRANCH tracked
WX_2_4_BRANCH tracked
WX_2_6_BRANCH tracked
WX_2_8_BRANCH tracked
WX_2_8_MICROFIX_BRANCH tracked
WX_2_9_0_BRANCH tracked
WX_3_0_BRANCH tracked
ZLIB tracked
arbitrary_weights tracked
karsten tracked
master tracked
ownerdraw-refactor tracked
show_hidden tracked
wxPy-3.0-branch tracked
wxPy-3.0.0 tracked
wxPy_branch tracked
wxPy_newswig tracked
wxPy_temp_253_branch tracked
wxQT tracked
wxSYMBIAN tracked
wxUNIVERSAL tracked
wxWebKitBranch-2.8 tracked
Local branches configured for 'git pull':
arbitrary_weights merges with remote arbitrary_weights
master merges with remote master
show_hidden merges with remote show_hidden
Local refs configured for 'git push':
arbitrary_weights pushes to arbitrary_weights (up to date)
master pushes to master (up to date)
show_hidden pushes to show_hidden (up to date)
Igors-MacBook-Air:wxFork igorkorot$ git remote -v
origin https://github.com/oneeyeman1/wxwidgets.git (fetch)
origin https://github.com/oneeyeman1/wxwidgets.git (push)
然后你应该设置delegate属性,将MainWindowController.xib包含文件窗口的委托属性设置为File的所有者。
答案 2 :(得分:1)
使用 Swift 3 ,windowDidResize方法应如下所示:
{'$unwind':'$issues'}
,{'$match':{'allissues': {$in: p.issues? p.issues.map(Number):[]}}}
,{ '$group' :{_id:'$_id', name :{ $first: '$name' },count: { $sum: 1 }} }'
答案 3 :(得分:0)
当用户更改窗口大小时,将调用windowWillResize方法。