按下按钮时触发动画

时间:2017-01-26 12:09:09

标签: animation xamarin.forms task mvvm-light

我试图弄清楚如何使用MVVM光框架在我的MVVM Xamarin Forms应用程序中从我的viewmodel触发动画而不会崩溃我的应用程序。

我了解到动画不属于viewmodel,因此我将此逻辑移至视图中。

当按下一个按钮(绑定到我的视图模型中的命令)时,我将视频模型中的一条消息发送到我的视图以触发动画。

Viewmodel代码:

public class GamePageViewModel : ViewModelBase
{
    private readonly IDialogService _dialogService;

    public ICommand NextRoundCommand
    {
        get
        {
            return new RelayCommand(() =>
            {
                NextButtonEnabled = false;
                _game.MoveToNextRound();
                UpdateOnScreenText();
                NextButtonEnabled = true;
            },()=> false);
        }
    }

    private bool _nextButtonEnabled = false;
    public bool NextButtonEnabled
    {
        get { return _nextButtonEnabled; }
        set
        {
            _nextButtonEnabled = value; 
            RaisePropertyChanged(()=>NextButtonEnabled);
        }
    }

    private void UpdateOnScreenText()
    {
        Messenger.Default.Send(new StartEnlargeAnimationMessage());
        Item1Text = _game.CurrentRound.OpenCards[0].Name;
    }
}

在我的xaml视图后面的代码中,我有一个执行动画的方法。

查看代码:

public partial class GamePage : ContentPage
{
    public GamePage(GamePageViewModel gamePageViewModel)
    {
        BindingContext = gamePageViewModel;
        InitializeComponent();

        Messenger.Default.Register<StartEnlargeAnimationMessage>(this, PlayEnlargeAnimation);
    }

    //private bool playingAnimation = false;
    private async void PlayEnlargeAnimation(StartEnlargeAnimationMessage message)
    {
        await RoundLabel.ScaleTo(2, 500, Easing.CubicIn);
        await RoundLabel.ScaleTo(1, 500, Easing.CubicIn);
    }

这有点奏效。

问题在于,当用户点击按钮两次(快速,在活动动画中)时,我收到错误“尝试将任务转换为已完成的最终状态。”

这个问题在很多个月似乎都是一个已知问题,但尚未修复(https://bugzilla.xamarin.com/show_bug.cgi?id=41016)。

正如此bug报告的评论中所提到的,我试图解决这个问题的方法是尝试隐藏/禁用按钮,但尚未找到成功的方法。

我也尝试同步调用动画。

如果您对如何解决此方案有任何见解,我们将不胜感激。

我的(仍然很小)代码库可以在这里找到:https://github.com/sjorsmiltenburg/Cyclades.Shuffler/tree/develop

1 个答案:

答案 0 :(得分:0)

嗯......显然我在我的模拟器中查看旧代码。我必须在模拟器上卸载程序才能刷新。这样做之后在动画期间禁用/启用按钮修复了我的问题。虽然我仍然感到失望,这可能会使应用程序崩溃。