feat(WhereUI): animate live location ranking overtakes - #289
Conversation
| } | ||
|
|
||
| isRankingSurfaceVisible = true | ||
| guard yearChanged || !wasVisible else { return } |
There was a problem hiding this comment.
Posted by an AI agent on the user’s behalf.
Review focus: this guard is load-bearing. A report change during one visible session updates only the typed reconciliation target, preserving the displayed pair through the 500 ms gate. Initial presentation, year changes, and returning from hidden state synchronize immediately and quietly instead.
| // Liquid Glass and Canvas artwork otherwise remain separate render | ||
| // layers. Flatten the complete card before applying the passing | ||
| // transform so its glass, microprint, and foreground stay aligned. | ||
| .compositingGroup() |
There was a problem hiding this comment.
Posted by an AI agent on the user’s behalf.
Review focus: the compositing boundary is intentional. Liquid Glass and Canvas-backed microprint can otherwise remain independent render layers during the keyframe scale and rotation; flattening the complete card here keeps those layers registered while leaving the settled Locations snapshots unchanged.
Summary
Why
Liquid Glass renders separately from ordinary SwiftUI content. Reordering the
ForEachhierarchy at animation start caused the card material to swap instantly and the lower card to grow from zero on later plays.Each ranked card now owns an independent one-effect container. A region-keyed layout moves the complete surfaces while the hierarchy stays stable. The model commits the true visual and accessibility order after the crossing finishes. New reports keep the active pass intact and queue only the latest delayed reconciliation.
Review focus
Testing
./swiftformat --lint./xcstrings --lint./sf-symbols --lint./test --no-generate --no-build WhereUITests— 477 tests passed./test --no-generate --only 'WhereUITests/LocationCardsReconciliationModifierTests'— 3 tests passedgit diff --check