DroppyTransition
The content transitions Droppy's own notch surfaces use (DroppyKit 1.8.0).
enum DroppyTransition
What the host already animates
You never animate the entrance of a view you hand the host. A live activity row and a HUD are mounted exactly like Droppy's own and appear, grow and close on Droppy's own code, so the root of makeCompactLeading(), makeCompactTrailing() and a DropletHUDRequest's content takes no transition of its own. Add one and the entrance plays twice.
What these are for
Content you swap yourself while the surface is already up: a glyph that changes in a wing, a status line replaced by a result inside a card, a control that appears. Give each branch the same transition and let the branch change insert and remove it:
Image(systemName: isCleaning ? "stop.fill" : "keyboard")
.id(isCleaning)
.transition(DroppyTransition.compactContent)Every transition carries its own curve, so it animates the same whether or not the state change is wrapped in withAnimation. The blur follows the host's budget (half on a 60Hz panel, a third in Low Power Mode) and Reduce Motion drops the blur and the fold, leaving the fade.
Type properties
compactContent
static var compactContent: AnyTransition { get }
Compact content unfolding out of the notch edge: a blur, a fade and a slight top-hinged fold, on notchOpen. It leaves on a short blur and fade.
The motion the host plays on a live activity's accessories and a HUD strip. Use it for content you swap inside a wing or a strip.
compactLeading
static var compactLeading: AnyTransition { get }
Leading-wing content collapsing horizontally toward the notch and growing back out of it, with a blur, on notchOpen.
Anchored at the wing's inner (trailing) edge, the way the Dynamic Island folds a side of its content into the cutout.
compactTrailing
static var compactTrailing: AnyTransition { get }
Trailing-wing content collapsing horizontally toward the notch and growing back out of it, anchored at the wing's inner (leading) edge.
element
static var element: AnyTransition { get }
One element appearing or leaving inside a card or a row: a blur, a fade, a horizontal scale from 0.8 and a slight fold, on notchOpen.
Droppy's own buttons and floating controls use this. Use it for a control, a label or a status line you swap while a card is up.
expandedContent
static var expandedContent: AnyTransition { get }
A whole card growing out of the notch and folding back up into it: a deep top-anchored scale from 0.4 by 0.2, a blur that clears before the card lands, a dim that follows the blur, and a slight fold. It opens on notchOpen and closes on notchClose.
This is precisely what the host plays on your card, published so the motion is not a guess. Put it on a view only when you swap one whole card layout for another inside a card that is already up; a single control inside a card takes element.