UIFeedbackGenerator
UIFeedbackGenerator and its subclasses offers a public interface to the Taptic Engine® found on iOS devices starting with iPhone 7. Haptics, branded Taptics, provide tactile feedback for on-screen events. While many system controls provide haptics out-of-the-box, developers can use UIFeedbackGenerator subclasses to add haptics to custom controls and other events. UIFeedbackGenerator is an abstract class that should not be used directly, rather developers use one of its subclasses.
Trigger Impact Haptic
Section titled “Trigger Impact Haptic”Example shows how to trigger an impact haptic using UIImpactFeedbackGenerator after a button press.
class ViewController: UIViewController{ lazy var button: UIButton = { let button = UIButton() button.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(button) button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true button.setTitle("Impact", for: .normal) button.setTitleColor(UIColor.gray, for: .normal) return button }()
// Choose between heavy, medium, and light for style let impactFeedbackGenerator = UIImpactFeedbackGenerator(style: .heavy)
override func viewDidLoad() { super.viewDidLoad() button.addTarget(self, action: #selector(self.didPressButton(sender:)), for: .touchUpInside)
// Primes feedback generator for upcoming events and reduces latency impactFeedbackGenerator.prepare() }
func didPressButton(sender: UIButton) { // Triggers haptic impactFeedbackGenerator.impactOccurred() }}Objective-C
Section titled “Objective-C”@interface ViewController ()@property (nonatomic, strong) UIImpactFeedbackGenerator *impactFeedbackGenerator;@property (nonatomic, strong) UIButton *button;@end
@implementation ViewController
- (void)viewDidLoad{ [super viewDidLoad]; [self.button addTarget:self action:@selector(didPressButton:) forControlEvents:UIControlEventTouchUpInside];
// Choose between heavy, medium, and light for style self.impactFeedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleHeavy];
// Primes feedback generator for upcoming events and reduces latency [self.impactFeedbackGenerator prepare];}
- (void)didPressButton:(UIButton *)sender{ // Triggers haptic [self.impactFeedbackGenerator impactOccurred];}
#pragma mark - Lazy Init- (UIButton *)button{ if (!_button) { _button = [[UIButton alloc]init]; _button.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:_button]; [_button.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES; [_button.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES; [_button setTitle:@"Impact" forState:UIControlStateNormal]; [_button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; } return _button;}
@end