This is similar to the coreanimation pattern in material-motion-swift.
This is a useful pattern for animation systems that require the target object and property to be provided up-front.
For example, off-thread animation systems require this.
A new build channel is added to MotionObservable.
An interaction that uses an off-thread animation system would use the build channel rather than the next channel.
This build channel passes along:
- a MotionBuilder<T> object
- a T of config values
The MotionBuilder<T> can take a T of config values to create some type of motion, and is created by the interaction.
The T is transformed by constraint operators as it is passed down the build channel.
Only specific T->T operators can transform this T.
If a stream given to MotionRuntime.write(stream, property) has an active build channel,
the MotionBuilder<T> will be given the transformed T and the property.
The new DynamicSpringSource and DynamicSpringBuilder uses this builder pattern.
DynamicSpringBuilder supports writing T values to Property<T> by using a TypeVectorizer to break a T value into multiple Float values.
Each float value is animated by a separate SpringAnimation.