This is a tiny iOS demo I made to check one specific thing:
Can a UIKit view still receive raw custom touch gestures while VoiceOver is on, if the view is marked as a silent direct-touch area?
The answer from this spike was yes.
The important setup is:
accessibilityTraits = [.allowsDirectInteraction]
accessibilityDirectTouchOptions = [.silentOnTouch]I also made sure not to use .requiresActivation.
The app is intentionally simple. It runs full screen in landscape, draws the touch paths, logs the raw touches, and speaks a short cue when it recognizes a gesture. If VoiceOver takes over a gesture before the app gets the touches, the app stays silent.
Demo video:
gesture-demo-vid.mp4
Tested gestures:
- Single-finger flick up
- Single-finger flick down
- Single-finger flick left
- Single-finger flick right
- Bottom-right outward drag
- Two-finger swipe inward
- Two-finger swipe outward
- Two-finger tap
- Three-finger tap
- One finger held in a corner while a second finger flicks
This is not a framework, library, or product. It is just a small usage demo for Apple's existing UIKit accessibility APIs.
To run it, open GesturePassThroughSpike.xcodeproj in Xcode, use a physical iPhone or iPad, build the app locally, turn VoiceOver on, and try the gestures.
The practical caveat is that iOS and VoiceOver can still reserve system gestures and system edge areas. This spike only shows that app-local custom gestures can pass through inside the configured direct-touch region.