【问题标题】:How to get resolution change event in swift?如何快速获取分辨率更改事件?
【发布时间】:2015-05-23 12:09:07
【问题描述】:

我尝试制作一个应用程序,现在我应该在屏幕分辨率发生变化时进行一些更改,但我找不到如何拦截此事件。

你知道我该如何参加那个活动吗?

【问题讨论】:

  • “屏幕分辨率变化”是什么意思?设备的屏幕分辨率不会轻易改变...:P
  • 对不起,我应该提到我需要 osX。
  • 也是我的错,我不应该假设一切都与 iOS 有关。 :)
  • 您应该将 OS X 添加到您的主题并作为您问题的标签。我依稀记得有办法做到这一点,但现在没有时间去寻找它。我稍后会尝试回到这个问题......
  • 感谢您的建议。

标签: macos swift cocoa


【解决方案1】:

NSApplicationDidChangeScreenParametersNotification 是在更改连接到计算机的显示器配置时发布的,因此 您可以注册该通知,例如与

NSNotificationCenter.defaultCenter().addObserverForName(NSApplicationDidChangeScreenParametersNotification,
    object: NSApplication.sharedApplication(),
    queue: NSOperationQueue.mainQueue()) {
        notification -> Void in
        println("screen parameters changed")
}

请注意,此通知的出现可能有多种原因 解雇,例如码头大小的变化(如Cocoa Dock fires NSApplicationDidChangeScreenParametersNotification 中所观察到的),所以你必须 “记住”旧分辨率并将其与新分辨率进行比较。

【讨论】:

    【解决方案2】:

    斯威夫特 4:

    didChangeScreenParametersNotification 在连接到计算机的显示器配置发生更改时发布。

    在 AppDelegate 类的 func applicationDidFinishLaunching() 或 ViewController 类的 func viewDidLoad() 内,插入以下代码:

    NotificationCenter.default.addObserver(forName: NSApplication.didChangeScreenParametersNotification,
                                           object: NSApplication.shared,
                                           queue: OperationQueue.main) {
                                           notification -> Void in
                                           print("screen parameters changed")}
    

    我个人在 Mac 和外部屏幕之间切换时使用它来居中应用程序的位置。

    【讨论】:

    • 虽然此代码 sn-p 可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • Narendra Jadhav,感谢您的建议。我会尽我所能为社区做出贡献。
    【解决方案3】:

    这是更新后的 Swift 3 代码:

     NotificationCenter.default.addObserver(forName: NSNotification.Name.NSApplicationDidChangeScreenParameters,
                                                                object: NSApplication.shared(),
                                                                queue: OperationQueue.main) {
                                                                    notification -> Void in
                                                                    print("screen parameters changed")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-30
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      相关资源
      最近更新 更多