能否禁用UISwitch的触觉反馈?实现类似iPhone6无振动效果
如何禁用UISwitch的触觉反馈
当然可以禁用UISwitch的触觉反馈!想要实现类似iPhone 6那样完全无振动的效果,这里有几种靠谱的方案,分情况给你说明:
方法1:自定义无触觉反馈的Switch(推荐用于上架App)
如果你的App需要通过App Store审核,自定义子类是最安全的方式。我们可以在开关触发动作时临时拦截触觉反馈:
class NoHapticSwitch: UISwitch { override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) { // 先保存原有的触觉反馈设置 let originalEnabledStatus = UISelectionFeedbackGenerator.isEnabled // 临时关闭全局触觉反馈 UISelectionFeedbackGenerator.isEnabled = false // 执行开关的原生动作 super.sendAction(action, to: target, for: event) // 恢复原来的设置,不影响其他控件 UISelectionFeedbackGenerator.isEnabled = originalEnabledStatus } }
之后在代码或Storyboard里直接使用NoHapticSwitch替代原生的UISwitch就可以了,完美复刻iPhone 6无振动的体验。
方法2:使用私有API(仅适合内部测试/个人项目)
如果你只是做内部测试或者非上架项目,可以直接通过私有属性关闭单个Switch的触觉反馈:
Swift版本:
yourSwitch.setValue(false, forKey: "_hapticFeedbackEnabled")
OC版本:
[yourSwitch setValue:@NO forKey:@"_hapticFeedbackEnabled"];
注意:私有API会导致App Store审核被拒,正式项目千万别用!
方法3:全局禁用触觉反馈(不推荐)
如果你的App完全不需要任何触觉反馈,可以在App启动时全局关闭:
UISelectionFeedbackGenerator.isEnabled = false
但这个方法会影响所有依赖触觉反馈的控件(比如UITableView的选中振动),除非你确定整个App都不需要,否则不建议这么做。
补充说明:iPhone 6本身没有配备Taptic Engine,所以原生就不会有触觉振动,上面的方法就是让新设备上的UISwitch也达到同样的无振动效果。
内容的提问来源于stack exchange,提问作者Alexdrob
相关产品推荐
相关产品推荐

