Table of Contents
Cocoa Application のウィンドウ(NSWindow)がリサイズされた時に処理を行いたい場合の Swift のプログラムについてです。
以下に記載するいずれかの方法によって、ウィンドウのリサイズによって呼び出されるメソッドを設定することができます。
1. NSWindowDelegateを使用
ウィンドウに NSWindowDelegate を設定すると、そのメソッド windowDidResize がリサイズによって呼び出されることを利用します。
例えば、以下のように AppDelegate を変更します。
AppDelegate.swift
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
NSApp.windows.first?.delegate = self
}
func windowDidResize(_ notification: Notification) {
// ウィンドウがリサイズされたときの処理
print("resized")
}
func applicationWillTerminate(_ aNotification: Notification) {
}
}
2. NotificationCenterを使用
NotificationCenter によって NSWindow.didResizeNotification による通知を受け取ります。
以下のように、設定した任意のメソッド(resized)をウィンドウのサイズ変更に応じて呼び出すことができます。
ViewController.swift
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.resized),
name: NSWindow.didResizeNotification, object: nil)
}
@objc func resized() {
// ウィンドウがリサイズされたときの処理
print("resized")
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
以上、ウィンドウのリサイズに応じた処理を実行する方法についてでした。
