Как сделать так, чтобы сенсорная панель моего приложения всегда была видна в macOS?

Я делаю приложение панели меню MacOS, которое отображает полноэкранный оверлей. Пользователь может контролировать прозрачность этого наложения с помощью ползунка в строке меню. Я хочу переместить эти элементы управления на сенсорную панель, потому что приложение используется для записи на экране, и отвлечения на главном экране будут записываться. Слайдер в моем приложении должен работать так же, как слайдеры яркости и громкости, которые по умолчанию находятся на сенсорной панели.

Я добавил свой NSTouchBar путем подклассов NSApplication и внедрение makeTouchBar, Панель появляется при первом запуске приложения. Тем не менее, сенсорная панель исчезает при фокусировке на любом другом приложении, и, похоже, нет способа вернуть сенсорную панель моего приложения снова. Проблема, я думаю, в том, что мое приложение представляет собой чистое приложение в строке меню без окон.

Вот как я могу сделать сенсорную панель моего приложения видимой, от наиболее предпочтительной до наименее предпочтительной:

  1. Добавьте значок для моего приложения на панель управления рядом со значками яркости и громкости. Это позволит пользователю нажимать на мой значок, чтобы настроить непрозрачность, даже когда другие приложения находятся в фокусе. Однако, как ни странно, мне сказали, что не существует публичного API для управления полосой управления.

  2. Каким-то образом дайте моему пользователю возможность вручную добавить мое приложение в панель управления. Контрольная полоса может быть настроена с помощью System Preferences > Keyboard > Customize Control Strip ..., который показывает множество вещей, которые можно перетащить в панель управления. Я хотел бы зарегистрировать свое приложение как элемент для включения сюда. Тем не менее, я не могу найти способ сделать это.

  3. Зарегистрируйте мое приложение как музыкальное приложение. Spotify на моей машине каким-то образом использует значок "музыка" на панели управления (тот же значок, который использует iTunes). Я не знаю, как это делает Spotify - кто-нибудь еще знает? Очевидно, это было бы взломом, так как мое приложение не воспроизводит звук, но это лучше, чем ничего.

  4. Каким-то образом переопределите область приложения, чтобы сенсорная панель моего приложения всегда была видна, что затрудняет использование сенсорной панели всеми другими приложениями. Это, очевидно, не идеально, так как он не очень хорошо работает с другими приложениями.

Возможно ли какое-либо из этих решений? Есть ли другие возможные решения? Как сделать так, чтобы сенсорная панель моего приложения всегда была доступна через сенсорную панель?

2 ответа

Решение

Может быть, есть какое-то хакерское решение, но согласно официальной документации вы не можете этого сделать: https://developer.apple.com/reference/appkit/nstouchbar

На поддерживаемых моделях MacBook Pro на сенсорной панели над клавиатурой отображаются экземпляры класса NSTouch Bar из самого переднего приложения.

Если вы можете поместить свое приложение в область Control Strip (где находятся регулятор громкости и друзья), пользователь может коснуться его там, чтобы вызвать вашу сенсорную панель. Посмотрите TouchSwitcher от hazeover, чтобы получить идею.

Другие вопросы по тегам