如何在周期性间隔动画
本文关键字:动画 周期性 | 更新日期: 2023-09-27 17:52:38
我有一个动画分针滑动6度的故事板。现在我要分针永远每59秒滑动一次。storyboard有什么属性或者其他方法吗?
我的故事板
<Storyboard
x:Name="myStoryboard2">
<DoubleAnimation
x:Name="minuteAnimation"
Storyboard.TargetName="minHandTransform"
Storyboard.TargetProperty="Angle"
Duration="0:0:1"
From="{Binding Time, Converter={StaticResource minuteHandTransform}}"
To="{Binding Time, Converter={StaticResource minuteHandTransform}}"
RepeatBehavior="1x">
<DoubleAnimation.EasingFunction>
<SineEase
EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
这听起来不像是你想要依靠动画来管理的东西。只需管理每分钟从代码开始的动画,你就完成了。这样做比使用神秘的转换器来控制From/to值要容易得多。像DoubleAnimation这样的时间轴有一个BeginTime属性,但我已经看到并验证了长动画持续时间(如1分钟或以上)在WinRT中出现bug的报告。
EDIT*(代码示例)
我通常使用两种简单的方法来触发事件在一个间隔是使用DispatcherTimer与回调事件或异步循环。
1只;DispatcherTimer
var timer = new DispatcherTimer { Interval = TimeSpane.FromSeconds(1) };
timer.Tick += (s, e) => { /* do your stuff */ };
timer.Start();
2只;异步循环
RunMyLoop();
private async void RunMyLoop()
{
while (true)
{
/* do your stuff */
await Task.Delay(1000);
}
}
尝试如下:
<Storyboard
x:Name="myStoryboard2">
<DoubleAnimation
x:Name="minuteAnimation"
Storyboard.TargetName="minHandTransform"
Storyboard.TargetProperty="Angle"
Duration="0:0:59"
From="{Binding Time, Converter={StaticResource minuteHandTransform}}"
To="{Binding Time, Converter={StaticResource minuteHandTransform}}"
RepeatBehavior="Forever">
<DoubleAnimation.EasingFunction>
<SineEase
EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>