RORK LABJP
RORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweakingRORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweaking
Articles/App Dev
App Dev/2026-07-14Intermediate

Long-Press Context Menus for a Gallery Item in a Rork Expo App

Long-pressing a wallpaper card does nothing, yet iOS users expect a preview and a menu. From why Pressable alone falls short, to a native context menu with zeego, resolving the scroll-vs-long-press conflict, wiring up save and share, and a custom overlay fallback for Android — all with working code.

Rork506Expo140React Native206context menuwallpaper app23

Premium Article

I was scrolling a wallpaper gallery on a real device and, almost absentmindedly, long-pressed a card. Nothing happened. Anyone used to an iPhone has muscle memory from the Photos app and the home screen: press and hold, and a preview with a menu should appear. Answering that expectation with silence makes the whole app feel a notch cheaper. Working on wallpaper apps as an indie developer, I have watched this small friction quietly cost engagement more than once.

The list screens Rork generates usually wrap a Pressable with nothing but a tap-to-navigate handler. Let us start there and work out why the long-press menu, specifically, needs one extra step.

What onLongPress leaves on the table

Pressable ships with onLongPress, so detecting the gesture itself is trivial.

<Pressable onPress={openDetail} onLongPress={() => setMenuOpen(true)}>
  <Image source={item.uri} style={styles.card} />
</Pressable>

But all this can raise is a sheet or modal you drew yourself. It is not the experience iOS shows by default — the target lifting gently, the background blurring, the preview appearing before you even release your finger. That lift and blur come from UIContextMenuInteraction, a native mechanism you cannot fully reproduce by stacking views from JavaScript.

So the decision comes down to this. If matching the behavior iOS users already know is the priority, bridge to a native context menu. If you want full control over the animation or a unified look on Android, build your own around onLongPress. For a wallpaper app that only needs the familiar trio of save, share, and favorite, the native route wins on both experience and effort.

Decide between two approaches first

Before writing anything, here is the trade-off on one page.

ConcernNative context menu (zeego)Custom overlay (Reanimated)
iOS preview liftExactly as standardClose, but hard to match fully
Consistent Android lookFollows the Material popupFully yours to design
Implementation effortLowHigh (gestures and geometry)
Dynamic menu itemsSomewhat constrainedFlexible

For the gallery I wanted the iOS feel out of the box, so I built with zeego first and only pulled the pieces I cared about on Android into a custom path. zeego is a thin wrapper over the native context menu, and it falls back to a regular menu where the native one is unavailable. When in doubt, I would start from zeego.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Why Pressable's onLongPress alone never gives you the iOS preview-and-menu experience, and where the line is
Building a native context menu with zeego and resolving the scroll-vs-long-press conflict via delayLongPress
Bundling save, share, and favorite into one menu, and switching to a custom overlay on Android
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

App Dev2026-07-07
Laying Out Variable-Height Images in Two Columns: A Masonry Wallpaper Gallery in a Rork Expo App
From why numColumns cannot pack variable-aspect images cleanly, to a dependency-free column-balancing algorithm, to keeping virtualization with FlashList masonry and a pragmatic no-dependency fallback, building a wallpaper gallery with real code.
App Dev2026-07-05
Building a One-Time Code Field in Expo — SMS Autofill and Segmented Display Together
A six-digit verification screen looks trivial, but once you account for SMS autofill, pasting, and deleting one digit at a time, it needs real care. Here is how to nail the iOS and Android autofill first, then build a segmented look on top of a single TextInput that does not break.
App Dev2026-06-27
Before You Ask 'Are You Sure?' — Consider an Undoable Delete
Showing a confirmation dialog every time someone removes a list item trains them to tap OK without reading. Here is how to build an undoable delete in a Rork (Expo) app, and where confirmation dialogs still belong.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →