Skip to content

fix(navigation): make push-enter feel as grounded as pop-exit#2041

Merged
lostf1sh merged 1 commit into
masterfrom
fix/push-enter-transition-perceptual
May 18, 2026
Merged

fix(navigation): make push-enter feel as grounded as pop-exit#2041
lostf1sh merged 1 commit into
masterfrom
fix/push-enter-transition-perceptual

Conversation

@lostf1sh

Copy link
Copy Markdown
Collaborator

Summary

  • Mirror the decelerate emphasized easing to (0.2, 0.85, 0.7, 1) so its time profile matches popExit's accelerate curve in reverse — the old (0.05, 0.7, 0.1, 1) front-loaded ~70% of the slide into the first 22ms, making new screens feel snap-in
  • Add scaleIn(0.92f) to enterTransition() to match the visual weight of popExit's scaleOut(0.92f)
  • Run fadeIn over the full TRANSITION_DURATION with an accelerate curve so alpha lags the slide — fixes the perceptual mismatch where the fade appeared to arrive before the slide (alpha changes are more visible than position changes at the same progress percentage)

Why

Reported by user testing settings navigation: the entrance animation felt instant compared to the exit. Investigation showed the asymmetry was real — decelerate emphasized's steep initial slope (0.85/0.2 ≈ 4.25x average speed at t=0) was completing the bulk of motion in ~22ms, while popExit's accelerate curve produced a gentle build with a satisfying late settle. Three changes restore symmetry: matched easing time-profile, matched scale weight, and offset fade timing.

Test plan

  • Open Settings, tap any section (Library, Appearance, Playback, etc.) — entrance should feel weighty/grounded, not snap-in
  • Press back from the section — exit should feel unchanged (this was already at the right level)
  • Same check across other forward/back navigations (Album→AlbumDetail, Artist→ArtistDetail, etc.) since enterTransition() is global
  • Verify nothing regressed in the parallax exit (exitTransition), pop-enter, or pop-exit transitions

🤖 Generated with Claude Code

The push-enter transition felt "snap-in" because the decelerate emphasized
easing (0.05, 0.7, 0.1, 1) front-loads ~70% of the slide into the first 22ms.
Visually, the new screen appeared near-instantly, then settled — asymmetric
with the pop-exit's slow build-up + late acceleration.

Three small changes:
- Mirror the decelerate easing curve to (0.2, 0.85, 0.7, 1) so its time
  profile matches popExit's accelerate curve in reverse.
- Add scaleIn(0.92f) to enterTransition so it has the same visual "weight"
  as popExit's scaleOut(0.92f).
- Run fadeIn over the full TRANSITION_DURATION using the accelerate curve
  so alpha stays low while slide does its work — prevents the perceptual
  "fade arrives before slide" mismatch (alpha changes are more visible
  than position changes at the same progress percentage).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lostf1sh lostf1sh merged commit 330617f into master May 18, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant