The short answer
Use a transient when something happens at an instant: a button press, a collision, a snap into place. Use a continuous event when something lasts: an engine running, a long press charging up, a rumble under music. If the moment has both an instant and a duration, use both: a transient on the hit, a continuous tail after it.
What a transient event is
HapticTransient is a short impulse. You place it at a time and give it an intensity and a sharpness, but you do not set its duration; the hardware plays one crisp pulse. Think of it as the haptic version of a click.
Good uses:
- Confirming a tap or a toggle
- Detents while scrolling a picker or a dial
- Impacts in a game: a ball hitting a wall, a footstep
- Beats in music
Transients are cheap to design and hard to get wrong, which is why most apps should start with them.
What a continuous event is
HapticContinuous is a sustained vibration with a duration you set in seconds. On its own it has a flat level, so the interesting part is shaping it: ramping intensity up, holding, then fading out, or sliding sharpness from soft to crisp. In Core Haptics you do that with parameter curves (HapticIntensityControl, HapticSharpnessControl) over the event’s lifetime, as described in the AHAP file format guide.
Good uses:
- Long-press progress that builds toward a commit
- Engines, motors, wind or rain in a game
- A heartbeat or breathing guide where the swell matters
- Charging a shot before release
Intensity vs sharpness
Both parameters run from 0 to 1, and they are not the same knob.
| Parameter | Low values feel | High values feel | Think of it as |
|---|---|---|---|
| Intensity | Faint, barely there | Strong, attention-grabbing | Volume |
| Sharpness | Round, soft, dull thud | Crisp, precise, tight click | Timbre |
A soft, low-sharpness transient reads as a gentle bump. The same intensity with high sharpness reads as a precise tick. For continuous events, low sharpness feels like rumble and high sharpness like buzz.
Design tips that hold up
- Start sparse. One well-placed transient beats a constant buzz. Haptics lose meaning when everything vibrates.
- Match the visual and the sound. If an animation lands at 120 ms, the tap should too. Even small offsets feel wrong.
- Use contrast. A heavy, low-sharpness hit stands out more after light, sharp ticks.
- Fade continuous events out. A hard stop at full intensity can feel like a glitch. A short decay on the intensity curve fixes it.
- Keep continuous events short in UI. Long vibrations belong in games and media, not in forms.
- Respect system settings and context. Users can turn off system haptics, and haptics are a supplement: never the only signal for something important.
- Test on a real iPhone. The Simulator, iPad and Mac do not play Core Haptics, and numbers on a screen tell you little about feel.
Combining both in one pattern
Many of the best patterns are layered:
- Impact with tail: a strong transient at time zero, then a short continuous event that fades over about a quarter of a second.
- Charge and release: a continuous event with rising intensity, ending in a sharp transient at the moment of release.
- Heartbeat: two transients close together (strong then softer), repeated, with a faint low-sharpness continuous underneath.
Shaping layers in Haptic Forge
Haptic Forge, my visual Core Haptics editor for iPhone, iPad and Mac, builds every pattern as a stack of layers on one timeline. Continuous layers are shaped directly (ramp up, hold, fade), transient layers are single taps, and intensity and sharpness can be dragged or typed as exact values. The result exports as a standard AHAP file.
If your source material is music or sound effects, generating haptics from audio gives you a first pass of transients and continuous layers to refine. Game teams will find more patterns in haptics for game developers.