anim
pkg.go.dev · import "github.com/chhongzh/lilt/anim"
框架里所有会动的数值都由同一种弹簧模型驱动。组件里用 Value,全局手感调 Spring 预设。
弹簧
| 签名 |
说明 |
详见 |
type Spring struct { Response, Damping float32; Ease bool } |
SwiftUI 式参数:Response 是无阻尼振荡周期(秒),Damping 是临界阻尼的比例,1 不回弹,越小越弹 |
弹簧 |
Spring.Ease |
改用指数缓动:第一帧就全速,没有惯性也不回弹;每 Response/2π 秒缩小剩余距离的 1-1/e,忽略 Damping |
弹簧 |
var Default = &Spring{Response: 0.29, Damping: 0.75} |
列表项和布局,轻微过冲;Value 的默认弹簧 |
预设 |
var Smooth = &Spring{Response: 0.39, Damping: 0.85} |
整屏的推入推出 |
预设 |
var Snappy = &Spring{Response: 0.31, Damping: 0.8} |
滑块、进度这类要紧跟的值 |
预设 |
var Bouncy = &Spring{Response: 0.25, Damping: 0.45} |
勾选标记等需要弹一下落定的东西 |
预设 |
var Interactive = &Spring{Response: 0.14, Damping: 1} |
跟手:按键按下时的反馈,快且不回弹 |
预设 |
预设是指针,运行时改一处,所有用它的值一起变。
动画值
| 签名 |
说明 |
详见 |
type Value struct |
朝目标弹过去的 float32;零值可用,静止在 0,用 Default;开始动之后不能复制 |
Value |
func NewValue(v float32, s *Spring) *Value |
静止在 v 的值 |
Value |
func (v *Value) Set(x float32) |
以弹簧动画移向 x |
Value |
func (v *Value) Jump(x float32) |
立即到 x 并停止运动 |
Value |
func (v *Value) Shift(d float32) |
当前值移动 d、目标不变,于是滑回原处;布局动画用它 |
布局动画 |
func (v *Value) Kick(velocity float32) |
加一个速度,例如列表到头时顶一下 |
Value |
func (v *Value) Bump(px float32) |
冲量大小按弹簧算好,静止时大约荡出 px 再回来;缓动值忽略 |
Value |
func (v *Value) Get() float32 |
显示用的值,含父值 |
Value |
func (v *Value) Current() float32 |
当前值,不含父值 |
Value |
func (v *Value) Target() float32 |
目标值,不含父值 |
Value |
func (v *Value) Velocity() float32 |
速度,单位每秒 |
Value |
func (v *Value) Settled() bool |
是否已静止 |
Value |
func (v *Value) SetSpring(s *Spring) |
换弹簧,nil 表示 Default |
Value |
func (v *Value) SetParent(p *Value) |
让 Get 加上 p 的值,子值跟着父值动 |
Value |
func (v *Value) SetPrecision(p float32) |
离目标多近算静止,默认 0.05 适合像素,0 到 1 的值要更小 |
自定义组件 |
调度器
| 签名 |
说明 |
详见 |
func Step(dt float32) bool |
把所有在动的值推进 dt 秒,报告是否有值在动;帧循环每帧调用,组件不用调 |
Value |
func Busy() bool |
是否还有值在动 |
Value |
var TimeScale float32 = 1 |
所有动画的时间倍率,调小放慢观察,调大让动画更快结束 |
帧率与电子墨水屏 |
橡皮筋
| 签名 |
说明 |
详见 |
func RubberBand(x, dim float32) float32 |
把原始越界距离换成显示距离,越拉越费劲,永远到不了 dim |
滚动到边缘 |
var RubberBandCoefficient float32 = 0.55 |
橡皮筋阻力,和 UIScrollView 相同 |
滚动到边缘 |