FeedbackController 1.0

FeedbackController 1.0

Andreas Neusüß 维护。



FeedbackController

CI Status Version License Platform

在苹果 iPhone 7 中引入了 Taptic Engine。它不仅使机械式主页按钮的替代成为可能,而且也为开发者引入了 API。通过这个 API,开发者可以为用户在屏幕上发生的事情提供微妙的机械反馈。

例如,一个应用程序可以将用户交互(如点击按钮、滑动滑块或翻转视图)与手机轻微震动结合起来。
还可以实现更复杂的反馈类型。通知可以与相应的触觉反馈结合起来,这样用户就可以实际感觉到任务是否执行成功或失败。

标准 API 的实现

要集成触觉反馈,必须使用 UIFeedbackGenerator。这个超类由三个不同的子类派生:UIImpactFeedbackGeneratorUINotificationFeedbackGeneratorUISelectionFeedbackGenerator
这三个子类可以用于三种不同的反馈类型

  1. UIImpactFeedbackGenerator 提供的单次点击似的反馈
  2. 使用 UINotificationFeedbackGenerator 提供的更复杂的反馈,以指示任务已完成(成功/出错)或发生了警告
  3. UISelectionFeedbackGenerator 提供的单次点击,表示用户选择的变化,例如在开关使用时或图片对齐时

在任何情况下,必须通过在任何提到的子类上调用 prepare() 来将 Taptic Engine 转换为其活动状态。为了与 UI 交互或甚至声音同步触觉反馈,应该在提前大约一秒钟或两秒左右调用 prepare

FeedbackController的作用

实际上,该API并不像我们所期望的那样简单。例如,当反馈应该触发时,就会设置notification-feedback的类型。
同样,影响反馈的类型必须在prepare状态期间设置。
除此之外,该API仅在iPhone 7或更高版本上以及运行iOS 11或更高版本的设备上可用。在使用所描述的API之前,必须执行可用性检查。由于必须强烈持有UIFeedbackGenerator的引用,并且可以在应用程序的许多地方调用prepareperform,这些检查需要相当频繁地执行。

这就是FeedbackController发挥作用的地方。它简化了执行触觉反馈所需的调用。它消除了开发者必须记住反馈类型可以配置的地方。
此外,它还提供了易于使用的UIViewController扩展。通过两种简单的方法调用,它们使您能够在应用中的任何地方使用反馈。

@IBAction func impactMedium(_ sender: Any) {
    prepareFeedback(for: .impact(style: .medium))
    hapticFeedbackImpactOccured()
}

然而,应尽早调用prepareFeedback(for:),以便触觉发动机可以被供电。有关更多详细信息,请参阅示例项目。

如果您觉得这使您的生活更加轻松,请随时使用它。否则,它可以为您提供参考实现。

用法

如果您使用CocoaPods集成FeedbackController,首先需要import FeedbackController

当您预计在一两秒钟内用户将进行交互时,调用prepareFeedback(for:)。这样做时,触觉发动机将被供电并准备好进行反馈。时间并不像您所想象的那么关键,而且在viewDidAppear(_:)中准备触觉发动机是足够的。
然而,反馈类型由调用prepareFeedback(for:)决定。

其次,需要进行反馈。要做到这一点,只需调用

  1. 对影响反馈,调用hapticFeedbackImpactOccured()
  2. 对通知反馈,调用hapticFeedbackNotificationOccured(with:),并指定所涉及通知的类型。
  3. 对选择反馈,调用hapticFeedbackSelectionChanged()

当您完成反馈时,请调用doneWithHapticFeedback()以允许触觉发动机返回空闲状态。

安装

pod 'FeedbackController'

您还可以手动安装。只需将 FeedbackController.swift 添加到您的项目中即可。

请查阅我的 个人网站,我的 博客 以及我的 Twitter 账号🙂

FeedbackController 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。