【问题标题】:Detect when a Mac OS X window is resized or moved检测 Mac OS X 窗口何时调整大小或移动
【发布时间】:2011-03-02 08:25:51
【问题描述】:

我正在编写一个应用程序,它必须知道任何窗口何时调整大小或移动。 我查看了通知,但它似乎没有达到我的预期。

你知道我怎么能做到这一点吗?

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    给你的窗口一个委托。 NSWindowDelegate protocolwindowWillResize:toSize:windowWillMove: 方法。

    【讨论】:

    • 它适用于所有窗口吗?我的意思不仅仅是应用程序中的那个?
    【解决方案2】:

    鉴于您对 Carl 的回答,我建议您使用 Accessibility API,它可以让您访问所有窗口(我相信框架更改通知),而不仅仅是您的应用程序。

    【讨论】:

    • 不幸的是,这是一个好主意,当事情完成而不是在移动或调整大小时会发出通知:(
    • 不幸的是,这是您可以为其他应用程序的窗口做的最好的事情。
    【解决方案3】:

    如果您想要窗口大小/排序,请查看 CGWindow.h。 CGWindowListCreateDescriptionFromArray() 可能就是你想要的。

    NSWindowList() 对于窗口列表也很有用。

    【讨论】:

      【解决方案4】:

      在 Swift 中,我的 AppDelegate 看起来像这样:

      func applicationDidFinishLaunching(notification: NSNotification) {
          // Set NSWindowDelegate to respond to windowWillResize
          window.delegate = self
      }
      
      func windowWillResize(sender: NSWindow, toSize frameSize: NSSize) -> NSSize {
          println(frameSize)
          return frameSize
      }
      

      【讨论】:

      • AppDelegate类中没有window属性。
      【解决方案5】:

      如果您需要管理 MacOS Windows,请尝试使用辅助功能。

      AX 非常棘手(低级/asyc),但这两个 github 帮助很大。

      https://github.com/tmandry/Swindler

      用途

      https://github.com/tmandry/AXSwift

      它们为窗口创建和移动等提供回调。

      从骗子开始

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2010-10-11
        • 2014-12-29
        相关资源
        最近更新 更多