Changelog History
-
v0.1.0 Changes
August 21, 2020Landscape!
Check out the new
.onLayoutForSizeClass
modifier!โก๏ธ With
.onLayoutForSizeClass
you can update your state variables to layout your drawer for landscape.Resting heights are now binding!
This means you can keep a state variable to contain your view heights. Instead of using the old
.locked
modifier, just change the resting heights parameter to a single height.๐ New Documentation Layout
The Readme is more concise, but it now contains links to other markdown files for Examples and Reference.
-
v0.0.4-beta Changes
July 18, 2020[Beta] Landscape
Introducing behaviors for landscape and split view orientations
๐ New View Modifiers
Alignment
0๏ธโฃ Defines the horizontal alignment for the drawer. The default is fullscreen.
public enum DrawerAlignment { case leading, center, trailing, fullscreen}
Usage
Drawer(heights: [100, 340]) { Color.blue} .width(.constant(340)) .alignment($alignment)
Width
Defines a width for the drawer when not in fullscreen alignment.
Usage
Drawer(heights: [100, 340]) { Color.blue}.width(.constant(340))
OnLayoutForSizeClass
โก๏ธ A callback to receive updates when the drawer is laid out for a new size class.
This closure is executed every time the device layout changes (portrait, landscape, and split view).
๐ Use this to modify your view when the drawer's layout changes.Usage
Alter the resting heights and alignment when the screen layout changes.Drawer(heights: [100, 340]) { Color.blue} .onLayoutForSizeClass { (sizeClass) inswitch (sizeClass.horizontal, sizeClass.vertical) { case (.compact, .compact):// smaller iPhone landscapebreakcase (.compact, .regular):// iPhone portrait// iPad portrait splitview// iPad landscape smaller splitviewbreakcase (.regular, .compact):// larger iPhone landscapebreakcase (.regular, .regular):// iPad fullscreen// iPad landscape larger splitviewbreakdefault:// Unknown layoutbreak } }
-
v0.0.3 Changes
July 16, 2020๐ฑ ๐ฅณ New Declarative View Modifiers!
๐ Thank you for all your support and feature requests!
New declarative view modifiers will help you customize the drawer experience. Shoutout to u/pupdogg007 for my favorite requested feature: locking the drawer.
๐ฑ I also spent a lot of time refining the fluidity of the drawer animations. In v0.0.2, I made the drags more responsive by toggling animation. In v0.03, after formulating a function on Desmos, I am introducing 'springiness' to the drawers when they are pulled beyond their boundaries. This animation feels more fluid by asymptotically reducing the influence of a drag.
๐ ๐ Locked
Locks the drawer in a controlled position. When set to true, the drawer will animate into the locked height.
๐ Lock into the current resting height
/\*Drawer\*/.locked($locked) { (currentPosition) inreturn currentPosition }
๐ฑ ๐ช Spring
Sets the springiness of the drawer when pulled past boundaries.
The user's drag displacement is transformed by a logistic curve for a natural hard-spring pull that reaches an asymptote.
/\*Drawer\*/.spring(20)
๐ฑ ๐ด OnRest
โก๏ธ A callback to receive updates when the drawer reaches a new resting level. This closure is executed every time the drawer reaches a new resting hieght. Use this when you want to receive updates on the drawer's changes.
/\*Drawer\*/.onRest { (restingHeight) inprint(restingHeight) }
๐ฑ ๐ฅ Impact
Sets the haptic impact of the drawer when resting
/\*Drawer\*/.impact(.light)
Other Notes
๐ Deprecated the init's
impact
parameter to prefer the declarative modifier. -
v0.0.1 Changes
July 14, 2020Edited Animation
๐ The animation is now disabled when dragging for increased responsiveness, and the release animation is now a spring.
๐ New Haptics
Haptic impact can be defined when the drawer reaches a resting height, using a
UIImpactFeedbackGenerator
. -
v0.0.0
July 14, 2020