FeedbackController
在苹果 iPhone 7 中引入了 Taptic Engine。它不仅使机械式主页按钮的替代成为可能,而且也为开发者引入了 API。通过这个 API,开发者可以为用户在屏幕上发生的事情提供微妙的机械反馈。
例如,一个应用程序可以将用户交互(如点击按钮、滑动滑块或翻转视图)与手机轻微震动结合起来。
还可以实现更复杂的反馈类型。通知可以与相应的触觉反馈结合起来,这样用户就可以实际感觉到任务是否执行成功或失败。
标准 API 的实现
要集成触觉反馈,必须使用 UIFeedbackGenerator
。这个超类由三个不同的子类派生:UIImpactFeedbackGenerator
、UINotificationFeedbackGenerator
和 UISelectionFeedbackGenerator
。
这三个子类可以用于三种不同的反馈类型
- 由
UIImpactFeedbackGenerator
提供的单次点击似的反馈 - 使用
UINotificationFeedbackGenerator
提供的更复杂的反馈,以指示任务已完成(成功/出错)或发生了警告 - 由
UISelectionFeedbackGenerator
提供的单次点击,表示用户选择的变化,例如在开关使用时或图片对齐时
在任何情况下,必须通过在任何提到的子类上调用 prepare()
来将 Taptic Engine 转换为其活动状态。为了与 UI 交互或甚至声音同步触觉反馈,应该在提前大约一秒钟或两秒左右调用 prepare
。
FeedbackController的作用
实际上,该API并不像我们所期望的那样简单。例如,当反馈应该触发时,就会设置notification-feedback的类型。
同样,影响反馈的类型必须在prepare
状态期间设置。
除此之外,该API仅在iPhone 7或更高版本上以及运行iOS 11或更高版本的设备上可用。在使用所描述的API之前,必须执行可用性检查。由于必须强烈持有UIFeedbackGenerator
的引用,并且可以在应用程序的许多地方调用prepare
和perform
,这些检查需要相当频繁地执行。
这就是FeedbackController发挥作用的地方。它简化了执行触觉反馈所需的调用。它消除了开发者必须记住反馈类型可以配置的地方。
此外,它还提供了易于使用的UIViewController
扩展。通过两种简单的方法调用,它们使您能够在应用中的任何地方使用反馈。
@IBAction func impactMedium(_ sender: Any) {
prepareFeedback(for: .impact(style: .medium))
hapticFeedbackImpactOccured()
}
然而,应尽早调用prepareFeedback(for:)
,以便触觉发动机可以被供电。有关更多详细信息,请参阅示例项目。
如果您觉得这使您的生活更加轻松,请随时使用它。否则,它可以为您提供参考实现。
用法
如果您使用CocoaPods集成FeedbackController,首先需要import FeedbackController
。
当您预计在一两秒钟内用户将进行交互时,调用prepareFeedback(for:)
。这样做时,触觉发动机将被供电并准备好进行反馈。时间并不像您所想象的那么关键,而且在viewDidAppear(_:)
中准备触觉发动机是足够的。
然而,反馈类型由调用prepareFeedback(for:)
决定。
其次,需要进行反馈。要做到这一点,只需调用
- 对影响反馈,调用
hapticFeedbackImpactOccured()
。 - 对通知反馈,调用
hapticFeedbackNotificationOccured(with:)
,并指定所涉及通知的类型。 - 对选择反馈,调用
hapticFeedbackSelectionChanged()
。
当您完成反馈时,请调用doneWithHapticFeedback()
以允许触觉发动机返回空闲状态。
安装
pod 'FeedbackController'
您还可以手动安装。只需将 FeedbackController.swift 添加到您的项目中即可。
请查阅我的 个人网站,我的 博客 以及我的 Twitter 账号
FeedbackController 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。