SwiftUI|使用 sensoryFeedback 添加触感反馈

SwiftUI|使用 sensoryFeedback 添加触感反馈

UIImpactFeedbackGenerator

UIImpactFeedbackGenerator 是 UIKit 提供的一个组件,可以用于精细的控制反馈类型。

UIKit 不支持 macOStvOS,因此,考虑到跨平台性,不建议使用它。

sensoryFeedback

基于选择状态的反馈(.selection)

  • 用户在设置中,切换深色/浅色模式
.sensoryFeedback(.selection, trigger: colorScheme)
  • 拖动项目重新排序列表时感受到的触觉反馈
.alignment

基于操作结果的反馈(.success)

告诉用户操作是否成功或出现了错误:

.sensoryFeedback(.success, trigger: isActionPerformed)
.sensoryFeedback(.error, trigger: isActionPerformed)
.sensoryFeedback(.warning, trigger: isActionPerformed)

自定义反馈效果(.impact)

.impact() 支持以下自定义参数:

  • weight:控制触感强度
    • .light - 轻微触感
    • .medium - 中等触感 (默认)
    • .heavy - 强烈触感
  • flexibility:控制触感质感
    • .rigid - 刚性/硬质触感 (如硬物碰撞)
    • .soft - 柔软触感 (如软物接触)
  • intensity:可以设置为 0.0 到 1.0 之间的值,用于精细控制强度
// 基本用法 - 中等强度
.sensoryFeedback(.impact, trigger: feedbackTrigger)

// 指定权重
.sensoryFeedback(.impact(weight: .heavy), trigger: feedbackTrigger)

// 同时指定权重和强度
.sensoryFeedback(.impact(weight: .heavy, intensity: 0.9), trigger: feedbackTrigger)

最佳实践

基于代办事项的完成状态,提供不同的震动反馈

完成重,取消轻:

.sensoryFeedback(
    event.isCompleted ? .impact(weight: .light) : .success,
    trigger: event.isCompleted
)

窗口关闭按钮

最佳选择是 .impact(flexibility: .rigid),它提供一种清脆、坚实的点击感,非常适合表示窗口关闭这样的确定性操作。

.sensoryFeedback(.impact(flexibility: .rigid), trigger: trigger)