Как определить изменение цвета цветовой панели в приложении Mac Catalyst?

#ios #macos #mac-catalyst #nscolorpanel

#iOS #macos #mac-catalyst #цветная панель nscolorpanel #nscolorpanel

Вопрос:

В Mac Catalyst есть элемент панели инструментов по умолчанию, который показывает цветную панель.

https://developer.apple.com/documentation/appkit/nstoolbaritem/identifier/1531463-showcolors

Он отображается просто отлично, но я не могу найти способ обнаружить изменение цвета с помощью этой цветовой панели. Кто-нибудь знает, как это сделать?

введите описание изображения здесь

Ответ №1:

При нажатии на элемент панели инструментов отображается экземпляр NSColorPanel . Выбранный цвет можно получить из NSColorPanel.color , но у нас нет ссылки на показанную панель. Даже класс NSColorPanel не отображается в приложениях Mac Catalyst.

К счастью, существует уведомление, которое публикуется при выборе цвета на цветовой панели. Итак, все, что нам нужно, это просмотреть это уведомление, чтобы получить ссылку на NSColorPanel экземпляр, а затем получить доступ к его color свойству:

 NotificationCenter.default.addObserver(forName: .init("NSColorPanelColorDidChangeNotification"), object: nil, queue: nil) { notification in
    let color = (notification.object as? NSObject)?.value(forKey: "color") as? UIColor
    print("Color changed", color)
}
  

Комментарии:

1. Это работа, но не уверен, пройдет она проверку или нет.

2. Я почти уверен, что так и будет. Здесь вы не получаете доступа ни к какому частному API. Все задокументировано.

3. @Hejazi не могли бы вы, пожалуйста, предоставить код objective-c?

4. @YogendraPatel Ну, это домашнее задание для тебя 🙂 Если серьезно, то это простое прослушивание событий с помощью NSNotificationCenter . Вы можете легко сделать это самостоятельно.