iOS触觉反馈UIFeedbackGenerator
iOS触觉反馈UIFeedbackGenerator

iOS触觉反馈UIFeedbackGenerator

UIFeedbackGenerator是什么?

UIFeedbackGenerator 是iOS提供的一组API,方便我们为应用增增触觉反馈(Haptic Feedback),从而为用户提供更多真实且细腻的交互体验。这种反馈可以帮助:

1、让按下按钮时有按压感;

2、让发生重大事件时有振动提示;

3、让滚动时有“咔”的反馈,增进操控感;

4、赋予应用更多“真实”的反馈环。

UIFeedbackGenerator的作用

现代移动应用中,触觉反馈可以显著地增进整体体验:

1、让操作有更多“真实感”,增大沉浸感。

2、为重大操作提供附加反馈,帮助用户确认。

3、为无障碍和有障碍的人提供更多感官线索。

比如:

用户“按下”购买按钮时,可以提供轻微振动,增大按下感。

用户收到一条通知时,可以用不同振动进行反馈。

主要子类

1、UIImpactFeedbackGenerator

作用:

为发生重大碰撞时提供反馈,如:

1、检票时“咔”的一声。

2、付费时“咚”的一声。

3、失败时“咣”的一声。

// 1. 创建发生器,指定样式
let generator = UIImpactFeedbackGenerator(style: .medium)

// 2. 预准备(建议在发生之前)
generator.prepare()

// 3. 发生反馈
generator.impactOccurred()

样式:

UIImpactFeedbackGenerator.FeedbackStyle:
// .light
// .medium
// .heavy
// .soft
// .rigid

2、UINotificationFeedbackGenerator

作用:

为重大通知提供不同反馈:

比如:

1、任务失败时“警告”。

2、任务成功时“确认”。

// 1. 创建发生器
let generator = UINotificationFeedbackGenerator()

// 2. 预准备
generator.prepare()

// 3. 发生反馈
generator.notificationOccurred(.error)   // 错误
// generator.notificationOccurred(.success) // 成功
// generator.notificationOccurred(.warning) // 警告

3、UISelectionFeedbackGenerator

作用:

为滚动时发生的小增量提供反馈:

比如:

每滚到一条时发生“咔”的反馈。

// 1. 创建发生器
let generator = UISelectionFeedbackGenerator()

// 2. 预准备
generator.prepare()

// 3. 发生反馈
generator.selectionChanged()

使用技巧

建议重复利用发生器

比如:

let impactGenerator = UIImpactFeedbackGenerator(style: .medium)
let notificationGenerator = UINotificationFeedbackGenerator()
let selectionGenerator = UISelectionFeedbackGenerator()

若每时刻重复new一个发生器:

可能导致消耗资源。

发生时有一定延迟。

建议准备好再发生

generator.prepare()
// 需要时再发生
generator.impactOccurred()

这样可以减少发生时的延迟。

实际用例

import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("发生触觉反馈") {
            let generator = UIImpactFeedbackGenerator(style: .medium)
            generator.prepare()
            generator.impactOccurred()
        }
    }
}

还可以复用UIImpactFeedbackGenerator,而不是每次按下时都去重复创建。

这样有以下优点:

1、减少资源消耗。

2、反馈发生时更加灵敏(因为你可以事先准备好发生器)。

import SwiftUI

struct ContentView: View {
    // 复用发生器,建议放在 View 中进行复用
    private let generator = UIImpactFeedbackGenerator(style: .medium)

    var body: some View {
        Button("发生触觉反馈") {
            // 事先准备好发生器(可以为发生做好准备)
            generator.prepare()
            // 发生反馈
            generator.impactOccurred()
        }
    }
}

这样可以在重复使用时,无需重复初始化。

总结

UIFeedbackGenerator提供了方便且优雅地为 App 增增触觉反馈的方法。

可以增加更多 “真实感”、“反馈”、“可信赖感”、“趣味性”和“沉浸感”。

这种反馈是无声且直观地为用户传达信息,与 UI 本身高度结合。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注