- (IBAction)gestureHandler:(UIPanGestureRecognizer *)sender {
switch (sender.state) {
case UIGestureRecognizerStateBegan:
// Instantiate a new generator.
self.feedbackGenerator = [[UISelectionFeedbackGenerator alloc] init];
// Prepare the generator when the gesture begins.
[self.feedbackGenerator prepare];
break;
case UIGestureRecognizerStateChanged:
// Check to see if the selection has changed...
if ([self myCustomHasSelectionChangedMethodWithTranslation:[sender translationInView: self.view]]) {
// Trigger selection feedback.
[self.feedbackGenerator selectionChanged];
// Keep the generator in a prepared state.
[self.feedbackGenerator prepare];
}
break;
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateFailed:
// Release the current generator.
self.feedbackGenerator = nil;
break;
default:
// Do nothing.
break;
}
}
三种方法在测试机上不同的反馈结果
| AudioServicesPlaySystemSound | 1519 | 1520 | 1521 |
|---|---|---|---|
| iPhone 7(iOS 10) | peek 触感 | pop 触感 | 三次连续短振 |
| iPhone 6s Puls(iOS 9) | peek 触感 | pop 触感 | 三次连续短振 |
| iPhone 6(iOS 10) | 无振动 | 无振动 | 无振动 |
获取 _tapticEngine
| iPhone 7(iOS 10) | 无振动 |
| iPhone 6s Puls(iOS 9) | 长振 |
| iPhone 6(iOS 10) | 无振动 |
| UIImpactFeedbackGenerator | .Light | .Medium | .Heavy |
|---|---|---|---|
| iPhone 7(iOS 10) | 微弱短振 | 中等短振 | 明显短振 |
| iPhone 6s Puls(iOS 9) | 长振 | 长振 | 长振 |
| iPhone 6(iOS 10) | 无振动 | 无振动 | 无振动 |
总结一下,希望同样的代码能在更多的机型上实现短振,建议使用 AudioServicesPlaySystemSound(1519)。不过可能会涉及到调用私有 API。安全起见,可以使用 UIImpactFeedbackGenerator。
代码
测试代码在这里。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ASPKU的支持。










