3

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

if #available(iOS 9.0, *)

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

我找到了这篇文章,但没有快速的解决方案: 检查 iOS9 设备上是否支持和启用 3D 触摸

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

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

但我总是得到这个错误:

'if' 条件后的预期'{'

4

2 回答 2

7

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

func is3DTouchAvailable() -> Bool
{
    return self.traitCollection.forceTouchCapability == UIForceTouchCapability.Available
}
于 2015-11-13T06:07:39.337 回答
2

是的,if self.traitCollection.forceTouchCapability == UIForceTouchCapability.Available可以,只要确保将其包装在一个if #available(iOS 9, *)

以 Peek and Pop 为例:

override func viewDidLoad()
    {
        super.viewDidLoad()

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

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

请随时查看此Peek and Pop 教程以获取更多详细信息,或此3D Touch 代码示例

于 2016-01-03T22:02:09.660 回答