【问题标题】:windowDidResize protocol swift OSXwindowDidResize 协议 swift OSX
【发布时间】:2015-07-01 19:24:24
【问题描述】:

我正在创建一个程序,我希望 UI 根据窗口的大小进行更改。我正在寻找一些在调整窗口大小时调用的方法。我查看了 windowDidResize 的文档,但是在调整窗口大小时我无法让它工作。

import SpriteKit
import AppKit
class GameScene: SKScene , SKPhysicsContactDelegate ,NSWindowDelegate{

****   bunch of code   ****


  func windowDidResize (notification: NSNotification) {
    HUDComp.updatePosition(size)
    println("Screen has been resized")
  }
}

任何信息将不胜感激。

【问题讨论】:

    标签: macos swift window protocols


    【解决方案1】:

    如果你继承了 NSWindowDelegate,你唯一应该做的就是在 NSNotificationCenter 上添加观察者。 代码在这里。

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("windowDidResize:"), name: NSWindowDidResizeNotification, object: nil)

    【讨论】:

      【解决方案2】:

      Swift 5 macOS 11+

      针对 Xcode 12.2 和 macOS Big Sur 进行了更新。

      当窗口的尺寸发生变化时,这将调用windowDidResize

      class ViewController: NSViewController, NSWindowDelegate {
      
          override func viewDidLoad() {
              super.viewDidLoad()
              
              NotificationCenter.default.addObserver(self, selector: #selector(NSWindowDelegate.windowDidResize(_:)), name: NSWindow.didResizeNotification, object: nil)
          }
      
          func windowDidResize(_ notification: Notification) {
              print(view.window?.frame.size as Any)
          }
      }
      

      【讨论】:

        【解决方案3】:

        swift 5 我的两分钱。(同时显示委托和通知,选择一个..)

          import Cocoa
        
        class ViewController: BaseController, NSWindowDelegate {
        
            override func viewDidLoad() {
                super.viewDidLoad()
        
                self.makeItListenZoom()
            }
        
        
        
            override func viewDidAppear() {
                self.view.window?.delegate = self
        
            }
        
        
            private final func makeItListenZoom(){
                NotificationCenter.default.addObserver(forName: NSWindow.didResizeNotification, object: nil, queue: OperationQueue.main) { (n: Notification) in
        
                    print("didresize---")
                }
            }
        
        
        
            func windowDidResize(_ notification: Notification){
                   print("windowDidResize")
               }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多