Взгляните на «continueTrackingWithTouch: withEvent:» в классе UIControl, UITouch и руководстве по обработке событий. Основная идея состоит в том, чтобы создать обработчик для события TouchDragInside, используя данные о местоположении из события для обновления центра кнопки.
Это был бы такой полезный совет, если вы работали на iOS, а вы нет.
Беглый взгляд на некоторые вещи в NSControl и NSView, я уверен, что это можно сделать, у меня просто нет быстрого ответа, и у меня мало времени. (
По сути, идея состоит в том, чтобы перехватить события mouseDown и начать обращать внимание на местоположение мыши, обновляя расположение кнопки на ту же относительную величину, которую мышь перемещает при каждой проверке.
Более позднее, если необходимо.