Похоже, что NSSlider в Cocoa не предоставляет делегата для получения события, такого как Value Changed для UISlider.
Как я могу непрерывно получать значение NSSlider и отображать его, например, в NSTextField?
Ответ 1
Вам нужно исследовать механизм cocoa Target/Action. Это базовая концепция cocoa, которую вы должны понять. Слайдеру (и любому другому элементу управления) можно назначить цель (некоторый объект контроллера) и действие (метод, который нужно вызывать для этого объекта контроллера).
Действие запускается, когда пользователь прекращает перетаскивание по умолчанию. Проверьте свойство Continuous ползунка в Интерфейсном Разработчике, чтобы оно вызывало действие при его скольжении.
Ответ 2
Одним из преимуществ использования подхода с таймером является то, что он работает в случае использования клавиатуры, а не мыши, для регулировки ползунка. Если у пользователя включен "Полный доступ с клавиатуры" в "Системных настройках", он может использовать клавишу "Tab" для фокусировки слайдера. Затем они могут удерживать нажатой клавишу со стрелкой, чтобы активировался автоповтор, после чего возникает ситуация, подобная перетаскиванию мышью: цель/действие многократно запускается, и вы хотите подождать минуту спокойствия, прежде чем сохранять в базе данных.
Вы должны быть осторожны, чтобы не удалить свой NSTimer преждевременно. Например, если пользователь закрывает приложение в течение этих нескольких секунд, вы, вероятно, захотите "сбросить" значение ползунка в базу данных перед завершением процесса.