Прослушивание события изменения размера окна в Swift / Objective-C
можно ли перебирать все открытые окна любого приложения в OSX и слушать их события изменения размера в Swift? Я хочу создать пользовательский оконный менеджер, который будет перемещать и изменять размеры событий на основе поведения пользователя – поэтому, если пользователь изменяет размер окна, другие окна автоматически перестраиваются.
Я Haskell, а не разработчик Swift, поэтому я был бы очень благодарен за любой фрагмент кода / пример, показывающий, как достичь этого эффекта. (На самом деле я буду использовать его как своего рода Haskell -> Связывание какао.)
Edit: Мне было бы очень интересно увидеть решение и в Objective-C, но Swift для меня здесь важнее.
4 ответов
можно ли перебирать все открытые окна любого приложения в OSX и слушать их события изменения размера в Swift?
Это можно сделать, лучшим способом было бы иметь пользовательский класс window manager реализовать NSWindowDelegate протокол и установить все окна делегат для вашего пользовательского оконного менеджера. Это даст вам всю информацию об изменении размера и перемещении требовать.
Я 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
}
}
затем вы можете просто выбрать, какие методы протокола вы хотите реализовать, поскольку все методы в протоколе являются необязательными.
вы должны быть в состоянии определить, какое окно вызывает метод делегата и отслеживать любые окна вы переместить или изменить размер из-за реакции на начальные изменения окна. Смотрите это вопрос переполнения стека для помощи в этом.
для получения списка всех окон в настоящее время на экране см. Это вопрос переполнения стека.
редактировать
для получения списка всех окон приложения в настоящее время на экране увидеть это вопрос переполнения стека.
первый шаг,вы должны добавить NSWindowDelegate и функции windowWillResize,полный код, как это:
class MainWindowController: NSWindowController, NSWindowDelegate {
override var windowNibName: String? {
return "MainWindowController"
}
override func windowDidLoad() {
super.windowDidLoad()
}
func windowDidResize(notification: NSNotification) {
//listen the event
}
}
затем вы должны установить свойство делегата,установите MainWindowController.xib включает свойство делегата окна файла владельцу файла.
С Swift 3 метод windowDidResize должен выглядеть следующим образом:
func windowDidResize(_ notification: Notification) {
// Listen to a window resize event
}
- создать NSWindowController класс
- откройте раскадровку и найдите контроллер окна, затем установите класс как пользовательский класс (вкладка проверка подлинности)
- создайте класс NSWindowDelegate с помощью метода windowWillResize
- установите экземпляр NSWindowDelegate в качестве окна.делегат свойство экземпляра NSWindowController
при изменении пользователем размера окна будет вызываться метод windowWillResize.