我想知道设备是否支持 3D Touch。我不喜欢使用UITraitCollection
的forceTouchCapability
属性,因为如果用户在设置中关闭了3D Touch,它可能会返回iPhone 6s的unavailable
。
我想知道硬件是否提供 3D Touch,无论设置如何。我看到的唯一可能的解决方案是检查设备的型号。但是,也许有人可以提出更稳定和简单的解决方案。
背景:我已将主屏幕操作添加到应用程序,并且只有在设备支持的情况下,我才想通知用户。
恐怕您无法检查您要求的确切功能,检查3d touch的可用性不仅与设备型号有关:
指示设备上 3D Touch 可用性的键。只 某些设备支持 3D Touch。在那些这样做的人身上,用户可以在"设置"的"辅助功能"区域中禁用3D Touch。
UIForceTouchCapability
这意味着系统会告诉您的应用程序 3d touch 不可用,无论设备是否支持 3d touch,这解释了您提到的内容:
我不喜欢使用
forceTouchCapability
属性 UITraitCollection,因为它可能会返回不适用于iPhone 6s,如果 用户已在设置中关闭 3D Touch。
但是,您可以在应用运行时检测 3D Touch 可用性的更改,方法是实现 traitCollectionDidChange(_:(,如检查 3D Touch 的可用性一文中所述:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
// Update the app's 3D Touch support.
if self.traitCollection.forceTouchCapability == .available {
// Enable 3D Touch features
} else {
// Fall back to other non 3D Touch features.
}
}
关于:
我看到的唯一可能的解决方案是检查设备型号
就个人而言,我认为做这样的事情没有意义,因为 - 正如我上面提到的 - 它是由系统控制的;在某些时候,无论设备是否支持 3D 触摸或使用禁用了 3d touch,它都不会产生区别,它应该会导致与你的应用相同的结果。