MacOS создает ProgressBar на StatusBar

Я ищу способ поместить ProgressBar в строку состояния Mac в качестве кнопки. Я хочу иметь что-то вроде этого:

Образец изображения

or

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

Что я могу сделать, так это:

    let statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.variableLength)

    [...]

    if let button = statusItem.button {
                button.image = NSImage(named:NSImage.Name("JustSomeImage"))
                button.title = "Hello"
                button.action = #selector(togglePopover(_:))

            }

Но с NSStatusItem я могу использовать только кнопку и объект меню для управления своим NSStatusBar. Так что все, что я могу сделать, это поместить изображение на панель с текстом. Я много искал решение и читал документ, но я не мог найти способ как-то поместить туда ProgressBar. У кого-нибудь есть идеи, как я могу это сделать?


person Cemal K    schedule 20.05.2018    source источник


Ответы (1)


Поскольку NSButton является подклассом NSView, вы можете добавить любое представление, которое хотите добавить. Ниже вы можете найти небольшой фрагмент кода на Objective C, но превратить его в Swift не составит труда.

NSProgressIndicator *indicator = [[NSProgressIndicator alloc] initWithFrame:button.frame];
[button addSubview:indicator];

С наилучшими пожеланиями и больших успехов.

person Marc T.    schedule 20.05.2018
comment
Спасибо, это помогает. Не могли бы вы также сказать мне, как я могу сделать что-то подобное, как на картинке в основном посте? Я понятия не имею, какой компонент мне нужно использовать, чтобы нарисовать это. Я мог бы просто добавить метки CPU и MEM в виде изображений, но индикатор выполнения я не могу понять - person Cemal K; 20.05.2018
comment
Есть разные варианты, как это сделать. Пользовательский рисунок в NSView с использованием NSBezierPath или разных NSImages и их отображение в зависимости от уровня датчика. Поскольку значки не сложные, я бы использовал первый подход. Сначала рисуем прямоугольник и линию с увеличенной шириной линии посередине. developer.apple.com/library/content/ документация/Какао/ - person Marc T.; 21.05.2018
comment
Эй, я попробовал первый подход, но мне уже не удалось заполнить прямоугольник указанным цветом. Кроме того, при выборе NSStatusItem.variableLength длина NSStatusItem, похоже, не регулируется. Даже с шириной моего NSRect, установленной на >100, она остается на уровне ~20 (я даже не знаю метрики). Теперь я хочу попробовать другой способ, просто сделать несколько изображений с интервалом ~ 10% индикатора выполнения. Хотя мой вопрос сейчас в том, как я могу добавить 2 изображения в один NSView? Извините, если беспокою вас, но я не могу найти в Интернете достаточно примеров документов/кода по этому поводу. - person Cemal K; 21.05.2018