第二十二章:动画(四)

相对动画
后续点击问题的一个解决方案是使用RelRotateTo(“relative rotate to”),它获取动画开始的当前Rotation属性,然后将其参数添加到动画结束的该值。 这是一个例子:

void OnButtonClicked(object sender, EventArgs args)
{
    button.RelRotateTo(90, 1000);
}

每次点击都会启动一个动画,在一秒钟内将按钮旋转90度。 如果您在动画正在进行时碰巧按下按钮,则会从该位置开始播放新动画,因此它可能会在不是90度增量的位置结束。 多次点击时速度没有变化,因为动画总是以每秒90度的速度运行。
RotateTo和RelRotateTo都有一个共同的底层结构。 在动画过程中,计算一个值 - 通常称为t(表示时间),有时称为进度。 此值基于已用时间和动画的持续时间:

𝑡 = 𝑒𝑙𝑎𝑝𝑠𝑒𝑑𝑇𝑖𝑚𝑒 / 𝑑𝑢𝑟𝑎𝑡𝑖𝑜

t的值的范围从动画开始时的0到动画结束时的1。 动画也由两个值(通常是属性的值)定义,一个用于动画的开始,一个用于结束。 这些通常称为起始值和结束值,或者来自和来自值。 动画根据简单的插值公式计算from和to之间的值:

𝑣𝑎𝑙𝑢𝑒 = 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒 + 𝑡 ∙ (𝑡𝑜𝑉𝑎𝑙𝑢𝑒 − 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒)

当t等于0时,value等于fromValue,当t等于1时,value等于toValue。
RotateTo和RelRotateTo都在调用方法时从Rotation prop erty的当前值获取fromValue。 RotateTo将toValue设置为等于其参数,而RelRotateTo将toValue设置为等于fromValue及其参数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章