I ran into the same problem, from the documentation:
...Note that calling these methods does not play haptics directly.
Instead, it informs the system of the event. The system then
determines whether to play the haptics based on the device, the
application’s state, the amount of battery power remaining, and other
factors. For example, haptic feedback is currently played only:
- On a device with a supported Taptic Engine (iPhone 7 and iPhone 7 Plus).
- When the app is running in the foreground. When the System
- Haptics setting is enabled.
I guess you just have to trust the system to known when it should fire...
I didn't like this approach for obvious reasons -so used AudioServicesPlaySystemSound and kSystemSoundID_Vibrate:
...On some iOS devices, you can pass the kSystemSoundID_Vibrate
constant to invoke vibration. On other iOS devices, calling this
function with that constant does nothing.
Objective-C
import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
Swift 3
import AudioToolbox
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
prepare
before callingimpactOccurred
, have you tried that? – KubetzmyGen
it in the same method ? Also, try moving the declaration of your generator somewhere earlier in the lifecycle and make sure youprepare
it before firing. Does this help ? – Uninterrupted