【问题标题】:MvvmCross v5 animation between two root presentations两个根演示文稿之间的 MvvmCross v5 动画
【发布时间】:2023-03-22 09:15:02
【问题描述】:

我有两个用 MvxRootPresentation 属性标记的 iOS 视图:LoginView 没有包装到导航控制器中,MainView 包装到导航控制器中。

当我调用ShowViewModel<MainViewModel>() 时,这两个视图之间没有动画。所有后续视图都照常进行动画处理(在 NavigationController 中)。

如何为这个过渡设置动画?

【问题讨论】:

  • 请将您的解决方案添加为下面的答案并接受它,而不是将其添加为您自己问题的更新。
  • 完成。我关于stackoverflow的第一个问题:)。

标签: ios animation xamarin mvvmcross


【解决方案1】:

好的,我自己做了 :) 我必须添加我的自定义演示文稿属性和自定义演示者:

public class AnimatedRootPresentationAttribute : MvxRootPresentationAttribute
{
}

public class MyPresenter : MvxIosViewPresenter
{
    public MyPresenter(IUIApplicationDelegate appDelegate, UIWindow window)
        : base(appDelegate, window)
    {
    }

    protected override void RegisterAttributeTypes()
    {
        base.RegisterAttributeTypes();

        _attributeTypesToShowMethodDictionary.Add(typeof(AnimatedRootPresentationAttribute),
            (viewController, attribute, request) => ShowAnimatedRootViewController(
                viewController, (AnimatedRootPresentationAttribute)attribute, request));
    }

    private void ShowAnimatedRootViewController(
        UIViewController viewController,
        AnimatedRootPresentationAttribute attribute,
        MvxViewModelRequest request)
    {
        ShowRootViewController(viewController, attribute, request);
        AddAnimation();
    }

    private void AddAnimation()
    {
        var transition = new CATransition
        {
            Duration = 0.2,
            Type = CAAnimation.TransitionMoveIn,
            Subtype = CAAnimation.TransitionFromTop
        };

        _window.RootViewController.View.Layer.AddAnimation(transition, null);
    }
}

【讨论】:

  • 谢谢,这帮助我实现了完全相同的行为!
  • 这太棒了。请注意,最新版本将 _attributeTypesToShowMethodDictionary 字典定义为受保护的属性。另请注意,当新的根 VC 包装在导航控制器中时,这会出现常见的动画故障,其中背景在动画时变黑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
相关资源
最近更新 更多