确定设备是否支持3D Touch

3
我想知道设备是否支持3D Touch。我不喜欢使用UITraitCollectionforceTouchCapability属性,因为如果用户在设置中关闭了3D Touch,则可能返回unavailable,甚至对于iPhone 6s也是如此。 我想知道硬件是否支持3D Touch,而不考虑设置。我能想到的唯一可能的解决方案是检查设备型号。但是,也许有人可以提供更稳定和简单的解决方案。 背景:我已经将主屏幕操作添加到应用程序中,并且只想在设备支持它们时通知用户。

当设备不支持3D Touch和用户关闭3D Touch时有什么区别? - Sulthan
@Sulthan,区别在于3D Touch被关闭了,用户可以将其打开,而当设备不支持该技术时则无法实现。 - kelin
1个回答

1
我担心您无法检查您要求的确切功能,检查3D Touch的可用性不仅与设备型号有关:

“Keys that indicate the availability of 3D Touch on a device. Only certain devices support 3D Touch. On those that do, 用户可以在设置中的辅助功能区域禁用3D Touch。”
(sub) UIForceTouchCapability

这意味着系统告诉您的应用程序,无论设备是否支持3D Touch,该功能都不可用,这解释了您提到的内容:

“我不喜欢使用UITraitCollection的forceTouchCapability属性,因为如果用户在设置中关闭了3D Touch,它可能会返回iPhone 6s不可用。”

然而,在你的应用程序运行时,你可以通过实现traitCollectionDidChange(_:)来检测3D Touch可用性的变化,正如Checking the Availability of 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 Touch 或用户是否禁用了 3D Touch,它都应该导致与您的应用程序相关的相同结果。


谢谢你的回答,但我已经知道了。 - kelin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接