【发布时间】:2015-12-08 05:10:35
【问题描述】:
你可以在 iPhone 6s 上使用 iOS 9 中的 Taptic 引擎吗? WatchOS2 和 OS X 能够使用触觉引擎,所以我认为它也会在 iOS 9 中,但我找不到任何适用于它的 API。
【问题讨论】:
-
“Taptic Engine API”在 2016 年 9 月 7 日的 Apple 主题演讲中被提及,所以,不,它不在 iOS9 上,但它似乎即将推出。
你可以在 iPhone 6s 上使用 iOS 9 中的 Taptic 引擎吗? WatchOS2 和 OS X 能够使用触觉引擎,所以我认为它也会在 iOS 9 中,但我找不到任何适用于它的 API。
【问题讨论】:
是的,我对内部 UIKit 的东西进行了逆向工程,并且我找到了另一种(更简单)的方法来通过 TapticEngine 进行反馈!我们可以只使用AudioToolbox 框架和几个魔术常量。
import AudioToolbox
AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms)
希望这会有所帮助!
【讨论】:
iOS 9 和 iOS 9.1 目前没有公开可用的 API。
免责声明:有一种方法可以直接与 Taptic Engine 交互,但有一种私有方法。你不应该在 App Store 应用程序中使用它。
但是,如果您更喜欢实验,那么您会发现 iOS 9 中提供了一个新的 private 类:_UITapticEngine。你可以找到它的标题here。为此,UIDevice 类上有一个新属性,称为_tapticEngine。请参阅 UIDevice here 的完整标题。您可以继续导入这些标头,或者只使用NSSelectorFromString 函数和performSelector: 方法进入taptic 引擎:
id tapticEngine = [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"_tapticEngine") withObject:nil];
[tapticEngine performSelector:NSSelectorFromString(@"actuateFeedback:") withObject:@(1001)]; // Peek
[tapticEngine performSelector:NSSelectorFromString(@"endUsingFeedback:") withObject:@(1002)]; // Pop
这将激活特定手势的触感引擎,尽管 Peek 和 Pop 的感觉与我相似。如果您指定任何其他常量,它将默认为振动。
我在GitHub 上整理了一个快速测试存储库,其中包括一个与 Swift 兼容的 API 以使用 Taptic 引擎:
UIDevice.currentDevice().tapticEngine().actuateFeedback(UITapticEngineFeedbackPeek)
使用风险自负!
我还写了更长的blog post,对此进行了解释。
【讨论】:
在 iOS 10 中有一个名为 UIFeedbackGenerator 的新 API。有关更多详细信息,请参阅此post。它目前仅适用于 iPhone 7。
【讨论】:
目前似乎没有针对 iOS 9 发布的 API。
在 OSX 上你需要使用NSHapticFeedbackManager:
NSHapticFeedbackManager Class Reference
这是WatchOS2的API:
WKInterfaceDevice Class Reference
只需在这里搜索,您就可以看到我在说什么:
Haptic search (iOS pre-release) - shows nothing
Haptic search (OSX pre-release) - shows NSHapticFeedbackManager
【讨论】: