【问题标题】:trigger an animation on button press按下按钮触发动画
【发布时间】:2017-01-26 12:09:09
【问题描述】:

我试图弄清楚如何使用 MVVM 轻框架从我的 MVVM Xamarin Forms 应用程序中的视图模型触发动画,而不会使我的应用程序崩溃。

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

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

视图模型代码:

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

正如此错误报告的 cmets 中所建议的,我尝试解决此问题的方法是尝试隐藏/禁用按钮,但尚未找到成功的方法。

我也尝试过同步调用动画。

如果您对如何解决这种情况有任何见解,我们将不胜感激。

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

【问题讨论】:

    标签: animation xamarin.forms task mvvm-light


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 2022-01-09
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多