【问题标题】:Taptic in iOS 9iOS 9 中的触感
【发布时间】: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 上,但它似乎即将推出。

标签: ios iphone ios9


【解决方案1】:

是的,我对内部 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)

希望这会有所帮助!

【讨论】:

  • 哇,这太棒了!但是,这算作私有 API 吗?他们确实在 API 参考中包含了 AudioServicesPlaySystemSound,但他们没有说明数字的含义:O
  • 这是一个哲学问题。在 App Store 审核过程中,任何非公共 API 都被视为私有的,但从技术上讲,几乎所有 API 的使用都可以被审核团队混淆/隐藏。我认为这里的主要问题是对任何特定 API 的适当或不适当使用。
  • 感谢您的回复。我正在尝试将其合并到我的 WWDC 奖学金应用程序中,我不想因此而被拒绝。我刚刚向 Apple 提交了这个问题,如果他们对此有任何意见,我会更新。
  • 这些调用不再适用于我的 iOS 10 Beta 6。
  • 适用于 iOS 10.0.2 (:
【解决方案2】:

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,对此进行了解释。

【讨论】:

  • 感谢您弄清楚如何做到这一点,并为此撰写了一篇很棒的博客文章。我尝试在我的一个小应用程序实验中使用它,但发现当使用 actuateFeedback 方法时,我可以触发的峰值或弹出反馈的速率存在限制,例如每秒 5 或 6 个。你知道有什么方法可以更快地触发这些吗?
  • 感谢您的评论。我相信这将是一个硬件限制。否则,我不知道该怎么做。
  • @kelin 该链接有效,但它应该是 https,即使浏览器应该进行重定向。你能再试一次吗?
【解决方案3】:

在 iOS 10 中有一个名为 UIFeedbackGenerator 的新 API。有关更多详细信息,请参阅此post。它目前仅适用于 iPhone 7。

【讨论】:

  • 有趣。我想知道有什么样的限制将 6S(+) 排除在使用这些 API 之外。
  • 我不知道。也许这是不同类型的(物理)taptic 引擎,也许它会在未来的 iOS 更新中修复。
  • 不提供链接,互联网上的平均链接半衰期是三小时。 StackOverflow 希望永远存在,但前提是它的内容here
【解决方案4】:

目前似乎没有针对 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

【讨论】:

  • 问题是关于 iOS 9。你已经发布了 OS X 和 WatchOS 的链接。
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 2016-10-15
  • 2015-10-08
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
相关资源
最近更新 更多