2017-05-17 2 views
3

J'ai deux vues iOS marquées par l'attribut MvxRootPresentation: LoginView sans être enveloppé dans le contrôleur de navigation et MainView avec l'enrobage dans le contrôleur de navigation. Lorsque j'appelle ShowViewModel<MainViewModel>(), il n'y a pas d'animation entre ces deux vues.Animation MvvmCross v5 entre deux présentations racines

Toutes les vues suivantes sont animées comme d'habitude (dans NavigationController).

Comment puis-je définir une animation pour cette transition?

+1

S'il vous plaît ajouter votre solution comme une réponse ci-dessous et l'accepter, au lieu de l'ajouter comme mettre à jour à votre propre question. – Cheesebaron

+0

Terminé. Ma première question sur stackoverflow :). –

Répondre

5

Ok, je l'ai il fait moi-même :) je devais ajouter mon attribut de présentation personnalisée et présentateur personnalisé:

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

Merci, cela m'a aidé à mettre en place exactement le même comportement! –

+0

C'est génial. Notez que la dernière version définit le dictionnaire _attributeTypesToShowMethodDictionary en tant que propriété protégée. Notez également que cela a le problème d'animation habituel lorsque le nouveau VC racine est enveloppé dans un contrôleur de navigation, où l'arrière-plan devient noir pendant qu'il s'anime. – Robert