SwiftUI|使用 sensoryFeedback 添加触感反馈

UIImpactFeedbackGenerator
UIImpactFeedbackGenerator
是 UIKit 提供的一个组件,可以用于精细的控制反馈类型。
UIKit 不支持 macOS
和 tvOS
,因此,考虑到跨平台性,不建议使用它。
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)