Swift如何检测是否支持3D Touch?

3

我的应用程序将显示设置,但仅当设备可以进行3D Touch时才可见。目前,我会检查设备是否具有iOS9。

if #available(iOS 9.0, *)

问题是,例如iPhone 6拥有iOS 9但没有3D Touch。我该如何使用Swift检查3D Touch的可能性?
我找到了这篇文章,但没有Swift解决方案: 检查iOS9设备上是否支持和启用了3D Touch 还有一个问题。 现在我想检查iOS 9和3D Touch是否可用。 我尝试了以下代码:
if (#available(iOS 9.0, *)) AND (is3DTouchAvailable() == true) {

但是我总是遇到这个错误:

在“if”条件之后需要“{”

2个回答

7

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

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

我第一篇帖子中有一个新问题。 - Trombone0904
你的项目最低部署目标是什么? - Irfan Gul
3
可将方法简化为 return traitCollection.forceTouchCapability == .Available。意思是将该方法简化为只返回手势能力是否可用的一行代码。 - Adam Waite

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对象(您可以从像touchesBegantouchesMoved等方法中获取),如果您的设备支持3D Touch,则touch.maximumPossibleForce属性将大于0。别忘了用if #available(iOS 9, *)将其包装起来。

欢迎查看Peek and Pop教程以获取更多详细信息,或者查看这个3D Touch代码示例


嗨,Quentin,关于您的4个连续答案,请查看此处 - bummi

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