swift 检查 3D Touch 是否可用

swift check if 3D Touch is possible

在我的应用程序中,我将显示设置,如果设备支持 3D Touch,这些设置应该是可见的。目前我检查设备是否有 ios9。

if #available(iOS 9.0, *)

问题是,例如 iPhone 6 有 iOS 9 但没有 3D Touch。如何使用 swift 检查 3D Touch 的可能性?

我找到了这个 post,但没有 swift 解决方案:

还有一个问题。 现在我想检查 iOS 9 AND 3D Touch 是否可用。 我试试这个:

if (#available(iOS 9.0, *)) AND (is3DTouchAvailable() == true) {

但我总是得到这个错误:

Expected '{' after 'if' condition

试试这个 swift 代码,self 指的是你的 UIViewController

func is3DTouchAvailable() -> Bool
{
    return self.traitCollection.forceTouchCapability == UIForceTouchCapability.Available
}

是的,if self.traitCollection.forceTouchCapability == UIForceTouchCapability.Available 会起作用,只需确保将其包裹在 if #available(iOS 9, *)

Peek 和 Pop 的示例:

override func viewDidLoad()
    {
        super.viewDidLoad()

        if #available(iOS 9, *) {
            if (traitCollection.forceTouchCapability == .Available) {
                if let collectionView = self.collectionView {
                    registerForPreviewingWithDelegate(self, sourceView: collectionView)
                }
            }
        }
    }

此外,如果您有一个 UITouch 对象(您可以通过 touchesBegantouchesMoved、...等方法获得它),如果您的设备支持 3D Touch,则 touch.maximumPossibleForce属性 将高于 0。不要忘记将其包裹在 if #available(iOS 9, *) 中;)

欢迎查看此 Peek and Pop tutorial for more details, or this sample of 3D Touch code