是否有任何API可以检查正在运行的机器是否有触摸条(或Xcode的触摸条模拟器)?
只有存在触摸栏时,我才会调用一些方法。如果我只是检查响应者属性的可空性,touchBar
即使机器不支持它,它也会自动创建一个 touchBar 实例。但是当它没有意义时,我不想创建一个。
是否有任何API可以检查正在运行的机器是否有触摸条(或Xcode的触摸条模拟器)?
只有存在触摸栏时,我才会调用一些方法。如果我只是检查响应者属性的可空性,touchBar
即使机器不支持它,它也会自动创建一个 touchBar 实例。但是当它没有意义时,我不想创建一个。
来自苹果的NSTouchBar
参考:
您的应用不需要也不需要 API 来知道是否有可用的 Touch Bar。无论您的应用程序是否在支持 Touch Bar 的机器上运行,您的应用程序的屏幕用户界面 (UI) 都会以相同的方式显示和运行。
很明显,Apple 的观点是触摸栏是附加的UI,它复制了其他地方可用的功能,因此您的应用程序不需要知道它是否存在。
因此,您的问题的答案是没有用于此目的的公共 API。
(我怀疑你可以弄清楚 - 考虑调用的委托、生成的事件等 - 无需调用任何私有 UI 或依赖机器 ID,但我不知道你能做到。)
高温高压
复制其他地方可用的功能
这对苹果来说似乎非常愚蠢。假设您有一个音频/视频应用程序,该应用程序具有用于某事的滑动条功能。没有触摸栏,控件位于屏幕的主窗口中。有了触控栏,它就在那里。那么,这是否意味着苹果希望这样一款应用同时在两个地方都有这样的控制呢?
对于他们来说,我能看到的唯一“缺点”是允许应用程序执行这样的功能,这使得拥有 Touchbar mac 的人很难(呃)向没有 Touchbar 的其他人解释如何使用所述应用程序(或相反亦然)。
我可以看到(也许)他们不希望应用程序必须具有仅在 Touchbar 上可用而不能以任何其他方式使用的功能。但这让我觉得有点像对 iPhone/iPad 应用程序的开发人员说,应用程序不需要知道它在哪个设备上运行。这就是他们添加自适应布局和特征的全部原因,对吧?“Touchbar/No-Touchbar”不是一回事吗?
这可能是他们“Touchbar API 2.0 列表”中最重要的东西之一——但他们知道,如果现在允许这样做,它很可能会被某人滥用。(有人制作的应用程序在有和没有 Bar 的情况下行为完全不同,因此试图解释和/或弄清楚它会变得一团糟,或者 TB 功能成为一种“被忽视的继子接口”,而不是仔细思考过的。)
此函数检查系统是否为带 TouchBar 的 MacBook Pro(“MacBookPro13,2”和“MacBookPro13,3”)。如果 Apple 将来发布其他带有 Touch Bar 的设备,您必须更新该功能。
func touchbarAvailable() -> Bool {
var size = 0
sysctlbyname("hw.model", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: Int(size))
sysctlbyname("hw.model", &machine, &size, nil, 0)
if (String(cString: machine) == "MacBookPro13,2" || String(cString: machine) == "MacBookPro13,3") {
return true
}
return false
}