【问题标题】:Update the Speed/Duration of a Rotation in a Storyboard更新情节提要中旋转的速度/持续时间
【发布时间】:2012-04-07 11:14:56
【问题描述】:

我正在尝试旋转 UserControl(图像)并以编程方式调整旋转速度。

所以,首先,我定义了一个故事板,它可以旋转一个轮子:

 <Storyboard x:Name="wheelRotation">
            <DoubleAnimation
                x:Name="leftRotation"
                Storyboard.TargetName="leftWheel"
                Storyboard.TargetProperty="(leftWheel.RenderTransform).(RotateTransform.Angle)"
                From="360" To="0" Duration="0:0:2"
                AutoReverse="False"
                RepeatBehavior="Forever">
            </DoubleAnimation>
</Storyboard>

接下来,我尝试以编程方式更新旋转持续时间,每 2 秒调整一次“速度”:

leftRotation.Duration = speed1;

乍一看,这似乎有效,尤其是在速度变化很小的情况下。但是如果速度增加,在每次更新时,车轮似乎都会稍微调整一下角度,从而导致“打嗝”。 (如果速度增加,例如在 2 分钟内从 2 秒增加到 4 秒,则轮子最后似乎会向前跳 1-2 度,如果时间减少,则轮子在每次更新时都会向后旋转一点)

我也尝试使用固定持续时间来实现该行为并更新 SpeedRatio,但这也无济于事,这些调整仍然发生。

我对 Silverlight/Windows Phone 相当陌生,所以我对它的内部工作原理没有更深入的了解,如果有人能给我提示如何解决它,我将不胜感激。谢谢...

【问题讨论】:

  • 您能解释一下您要做什么吗?我还没有尝试在“飞行中”更改动画,所以没有这方面的经验。你能解释一下你在做什么(为什么动画需要在运行时这样改变)?

标签: c# windows-phone-7 storyboard


【解决方案1】:

我不确定在运行时更改 Storyboard / DoubleAnimation 的属性是否是个好主意。我将删除RepeatBehavior="Forever",以便动画触发一次,而不是处理Storyboard.Completed 事件以在每次动画停止时再次启动动画。然后,您可以在它重新开始之前调整持续时间。

【讨论】:

  • 谢谢。试过了,但旋转在继续之前暂停了大约半秒,即使我在完成事件中所做的只是调用wheelRotation.Begin();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2021-11-19
  • 1970-01-01
  • 2018-07-01
  • 2013-10-26
  • 2019-10-15
  • 2017-05-03
相关资源
最近更新 更多