Material Motion Exploring solutions that will empower creators with the tools needed to describe and implement rich, interactive motion on any platform. Edit this page · History

November 17-November 23, 2016

Want to contribute? Check out our Android and iOS milestones, many of which are ready for someone to take ownership of. Also check out our newbie-friendly tasks.

This weekly update captures what changed in a given week across the Material Motion ecosystem.

Check out current focus to see what weโ€™re working on next.

Check out stability to learn about the current state of each feature.

People involved in this sprint

appsforartists featherless pingpongboss

What has changed


  • ๐ŸŽ‰: something launched! Click to view the release notes.
  • ๐Ÿ“: something was worked on.
Tech stack Starmap Apple Android Web
Runtime ย  ๐ŸŽ‰ ย  ๐Ÿ“
Interactions ย  ย  ย  ย 
Transitions ๐Ÿ“ ๐Ÿ“ ย  ย 
Serialization ย  ย  ย  ย 
Motion language Starmap Apple Android Web
ArcMove ย  ย  ย  ย 
AppliesVelocity ๐Ÿ“ ๐ŸŽ‰ ย  ย 
ChangeAnchorPoint ย  ย  ย  ย 
DirectlyManipulable ย  ย  ๐ŸŽ‰ ย 
Draggable ย  ย  ๐ŸŽ‰ ๐Ÿ“
PausesSpring ๐ŸŽ‰ ๐ŸŽ‰ ๐Ÿ“ ย 
Pinchable ย  ย  ๐ŸŽ‰ ย 
RemoveSpring ย  ย  ย  ย 
Rotatable ย  ย  ๐ŸŽ‰ ย 
SpringTo ย  ย  ย  ๐Ÿ“
Tween ย  ย  ย  ๐Ÿ“
TransitionSpring ย  ย  ย  ย 
TransitionTween ย  ย  ย  ย 
Interactions Starmap Apple Android Web
Color interpolation ย  ย  ย  ย 
Parallax scrolling ย  ย  ย  ย 
Sentence builder ย  ย  ย  ย 
Sparkle Dialog ย  ย  ย  ย 
Photo transition ย  ๐ŸŽ‰ ย  ย 


Updates to AppliesVelocity and PausesSpring due to iterations on photo transition example.

Android platform

๐ŸŽ‰ Direct manipulation Published 1.0.0. View the release notes.

๐ŸŽ‰ Direct manipulation ScaleGestureRecognizer to track span, RotateGestureRecognizer to track angle. Pinchable and Rotatable plans. Multi-touch support.

๐ŸŽ‰ Direct manipulation Anchor point adjustment so fingersโ€™ centroid is always untransformed.

๐ŸŽ‰ Direct manipulation Track velocity of centroid position for drag, span for scale, and angle for rotate.

๐ŸŽ‰ Direct manipulation Remixer integration.

๐ŸŽ‰ Direct manipulation DirectlyManipulable plan composes out to Draggable, Pinchable, and Rotatable.

Apple platforms

๐ŸŽ‰ Runtime Published v6.0.1. View the release notes.

๐ŸŽ‰ Runtime is now synced internally.

๐Ÿ“ Runtime internals have been significantly reworked and simplified. Unit test tools will soon be available for dependent libraries.

๐Ÿ“ CoreAnimation Working on block-based animation API. This feature will greatly improve the ability for existing code bases to move to Material Motion. View the diff.

Example UIKit code:

self.squareView!.alpha = 0
UIView.animate(withDuration: 1) {
  self.squareView!.alpha = 1

Equivalent Material Motion code (simply a replacement of UIView.animate with runtime.tween):

squareView.alpha = 0
runtime.tween(withDuration: 1) {
  squareView.alpha = 1

๐Ÿ“ CoreAnimation Working on block-based animation API. This feature will greatly improve the ability for existing code bases to move to Material Motion. View the diff.

๐Ÿ“ CoreAnimation Built a demo of a scroll-view-driven animation using the Timeline:

let tween = Tween("transform.rotation.z", duration: 200, values: [0, M_PI])
tween.timeline = timeline
runtime.addPlan(tween, to: squareView.layer)

func scrollViewDidScroll(_ scrollView: UIScrollView) {
  let offset = scrollView.contentOffset.y +
  timeline.scrubber?.timeOffset = abs(TimeInterval(offset))

๐ŸŽ‰ CoreAnimation transitions Published v1. View the release notes.

Includes the TransitionTween motion language term.

๐ŸŽ‰ POP Published v2 and v2.1. View the v2 release notes. View the v2.1 release notes.

Includes the PausesSpring and AppliesVelocity motion language terms.

Example describing a โ€œtossable elementโ€ interaction:

  // Allow the element to be dragged.
  Draggable(withGestureRecognizer: pan),

  // Always be anchored to the provided position.
  SpringTo(position, destination: anchoredPosition),

  // Pauses the spring simulation while the gesture recognizer is active.
  PausesSpring(position, whileActive: pan),

  // Feeds the pan gesture recognizer's velocity into the spring on gesture completion.
  AppliesVelocity(position, onCompletionOf: pan)
], to: layer)

๐Ÿ“ POP Working on block-based API for generating springs. View the diff. Example:

let configuration = SpringTo.defaultConfiguration
configuration.friction = sqrt(4 * configuration.tension) * 0.5

runtime.springTo(withConfiguration: configuration) {
  circle.position = gestureRecognizer.location(in: view)

๐ŸŽ‰ POP transitions Published v1. View the release notes.

Includes the TransitionSpring motion language term.

๐ŸŽ‰ Transitions Landed the Photo Transition demo. View the diff.

Latest demo showing a fully functional โ€œflick-to-dismissโ€ interaction on the photo. Note that velocity from the gesture feeds into the spring simulation:

Web frameworks

๐Ÿ“ WebAnimations Iterating on Tween implementation. View the diff.

๐Ÿ“ Prototype Working prototype of SpringTo, Draggable, and Tween proved out with the Runtime v1. View the codepen.

Learn more

Join us on Discord!