我们在iOS 9中是否有用于3d touch的公共API?

时间:2015-09-12 08:14:59

标签: ios objective-c iphone swift

如何在iPhone 6s和6s Plus上构建自定义快速链接,就像iPhone 6s和6s Plus中的原生应用程序一样?

3 个答案:

答案 0 :(得分:0)

按预期非常简单:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
     guard let touch = touches.first else { return }
     if traitCollection.forceTouchCapability == .Available {
        println("Pressure is \(touch.force) and maximum force is \(touch.maximumPossibleForce)")
     }
}

答案 1 :(得分:0)

正如我在realm.io

中提到的那样

在基础层面,仅作为UITouch中的新属性公开

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
     guard let touch = touches.first else { return }
     if traitCollection.forceTouchCapability == .Available {
        println("Touch pressure is \(touch.force), maximum possible force is \(touch.maximumPossibleForce)")
     } }

除了UITouch API之外,Apple还提供了两组新的类,为应用添加3D Touch功能:UIPreviewAction和UIApplicationShortcutItem。

UIPreviewAction允许开发人员在3D触摸UI元素时快速在新的“预览”叠加层中显示内容。这是一种很棒的方式,可以快速浏览特定于应用的内容,例如电子邮件,照片甚至网站,而无需提交全视图控制器转换。

UIApplicationShortcutItem对象在iOS主屏幕上启用了一项令人惊叹的新功能。当用户3D触摸应用程序图标时,会显示一个选项,允许用户快速跳转到应用程序的特定部分,或执行应用内操作。

另外,不要忘记apple document for 3D touch

答案 2 :(得分:0)

其他答案很接近,但没有雪茄。您需要添加touchesMoved:withEvent:方法(不是touchesBegan:withEvent:):

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let touch = touches.first else {
        return
    }

    if traitCollection.forceTouchCapability == .Available {
        print("Touch pressure is \(touch.force), maximum possible force is \(touch.maximumPossibleForce)")
    }
}