如何让我的应用程序的触摸栏在 macOS 上始终可见?

Posted

技术标签:

【中文标题】如何让我的应用程序的触摸栏在 macOS 上始终可见?【英文标题】:How can I make my application's touch bar always visible on macOS? 【发布时间】:2017-03-18 19:05:35 【问题描述】:

我正在制作a macOS menu bar application,它显示全屏覆盖。用户可以通过菜单栏中的滑块控制此叠加层的不透明度。我希望将这些控件移动到触摸栏,因为该应用程序用于屏幕录制,并且会记录主屏幕上的干扰。我的应用程序中的滑块应该就像默认情况下触摸栏上的亮度和音量滑块一样。

我通过子类化NSApplication 并实现makeTouchBar 添加了我的NSTouchBar。首次启动应用程序时会出现该栏。但是,当关注任何其他应用程序时,触摸栏会消失,并且似乎无法再次带上我的应用程序的触摸栏。我认为问题在于我的应用程序是一个没有窗口的纯菜单栏应用程序。

以下是我可以使我的应用程序的触摸栏可见的方法,从最可取到最不可取:

    为我的应用程序添加一个图标到控制条,在亮度和音量图标旁边。这将让用户点击我的图标来调整不透明度,即使在其他应用程序被聚焦时也是如此。然而,奇怪的是,I am told that there is no public API to manipulate the control strip。

    以某种方式为我的用户提供一种手动将我的应用程序添加到控制条的方法。可以通过System Preferences > Keyboard > Customize Control Strip ... 自定义控制条,它显示了可以拖放到控制条中的各种内容。我想将我的申请注册为要包含在此处的项目。但是,我找不到任何方法来做到这一点。

    将我的应用程序注册为音乐应用程序。我机器上的 Spotify 不知何故使用了控制条中的“音乐”图标(与 iTunes 使用的图标相同)。我不知道 Spotify 是如何做到这一点的——还有其他人知道吗?显然,这将是一个 hack,因为我的应用程序没有播放音频,但总比没有好。

    以某种方式覆盖应用程序区域,以便我的应用程序的触摸栏始终可见,从而破坏了所有其他应用程序对触摸栏的使用。这显然不理想,因为它不能很好地与其他应用程序配合使用。

这些解决方案是否可行?还有其他可能的解决方案吗?如何让我的应用程序的触控栏始终可以通过触控栏访问?

【问题讨论】:

你有没有想过如何做到这一点? @user2397282 不。据我所知,这是不可能的。 方法如下:***.com/a/46605263/473672 【参考方案1】:

也许有一些 hacky 解决方案,但根据官方文档,你不能这样做: https://developer.apple.com/reference/appkit/nstouchbar

在支持的 MacBook Pro 机型上,键盘上方的触控栏, 显示最前面的应用程序中的 NSTouch​Bar 类的实例。

【讨论】:

如果您在后台运行应用程序窗口可能会?在使用其他应用程序时,Spotify 应用程序可以很好地完成这一点【参考方案2】:

如果您可以将您的应用程序放入控制条区域(音量控制和朋友所在的位置),那么用户可以在那里触摸它以调出您的触摸栏。请参阅 hazeover 的 TouchSwitcher 以了解此想法。

【讨论】:

以上是关于如何让我的应用程序的触摸栏在 macOS 上始终可见?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的窗口从另一个在 MacOS 上拖动的窗口中窃取焦点?

如何让我的 JQueryUI 可拖动元素浮动到另一个溢出的元素中?

如何防止搜索栏在滚动时消失? iOS 斯威夫特

如何让导航栏在转回时显示大标题?

使用 Tkinter 中的菜单栏在页面之间切换

iOS:使导航栏在 UITableViewController 中始终可见