【问题标题】:How to animate at periodic intervals?如何定期制作动画?
【发布时间】:2013-01-11 07:21:57
【问题描述】:

我有一个故事板,它可以让分针滑动 6 度。现在我希望分针永远每 59 秒滑动一次。是否有情节提要的任何属性或我可以做到的任何其他方式?

我的故事板

<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>

【问题讨论】:

    标签: c# xaml windows-8 windows-runtime winrt-xaml


    【解决方案1】:

    这听起来不像是您想要依靠动画来管理的东西。只需管理从每分钟背后的代码开始动画,您就完成了。这样做比使用神秘的转换器来控制 From/To 值要容易得多。诸如 DoubleAnimation 之类的时间轴具有 BeginTime 属性,但我已经看到并验证过长动画持续时间(如 1 分钟或以上)在 WinRT 中遇到错误的报告。

    EDIT*(代码示例)

    我常用的两种按时间间隔触发事件的简单方法是使用带有回调事件的 DispatcherTimer 或异步循环。

    1。调度器定时器

    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);
        }
    }
    

    【讨论】:

    • 如何每分钟从后面开始动画?代码不会在加载时只执行一次吗?如果你不介意你能把一些代码存根吗?
    • 非常感谢,会试试看!
    【解决方案2】:

    尝试以下方法:

    <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>
    

    【讨论】:

    • 持续时间不表示动画应该播放多长时间而不是什么时候?我实际上希望这只手在 1 秒内平滑滑动 6 度,这就是为什么我将持续时间设置为 1 秒。知道我该怎么做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2013-06-17
    • 2021-10-18
    相关资源
    最近更新 更多