Multiple gestures compete for the same onset
Aliases: gesture competition · onset ambiguity · simultaneous recognition
What it is
For the first tens of milliseconds after contact, tap, long-press, pan, and swipe look almost the same: several recognizers claim one onset. The clash lives in a window that has not yet grown distinguishing features, not in the user performing two gestures. A single finger on a map might drop a pin, start a pan, or wind up a double-tap zoom—that is the competition.
Why it happens
The event stream uncovers evidence gradually: down gives a point, movement gives direction, time gives duration, a second finger gives count. Until those features exist, every candidate has nonzero likelihood and the system can only watch in parallel. If one recognizer declares success early, the others starve and the intended gesture is rewritten. Competition is missing information, not sloppy code.
Studying it
From timestamped traces, label each down event with the gesture eventually intended, then count how many remain plausibly another class at 50–150 ms. Factors include the size of the co-located gesture set and target type (tappable, scrollable, long-pressable). Measures include error class (meant to tap but scrolled, meant to scroll but got a menu), decision delay, and mid-gesture repairs. Scoring only the final gesture name hides killed candidates.
Where it stops holding
A closed button hotspot mostly pits tap against slide-to-cancel; pan is barely a candidate. A drawing canvas is almost only pan. Competition grows with the set of live recognizers, not linearly with screen size. A system edge gesture injects an extra recognizer from outside the app and can dirty an onset the app already thought it had settled. Text-selection clashes are a separate locus and are not covered by this general account.
Applying it
- Inventory every recognizer that reacts to a down in the same hotspot, and drop hidden gestures that have no other entry.
- Keep recognizers in a possible state rather than success until a distinguishing feature appears.
- Filter failed tasks by “another reading was still plausible at 100 ms,” not by the name of the final action.
Related
- Same group: C3.19.2 Disambiguation order by direction, speed, finger count, and duration · C3.19.3 No irreversible commit during the discrimination window · C3.19.4 Touch-ownership rules for nested scrollers
- Adjacent: C3.30 Gesture conflicts with text selection · C3.31 System versus app gesture priority
- Search:
gesture conflict·simultaneous recognition·onset ambiguity