2014-10-10 83 views
2

我正在爲使用MvvmCross的iOS開發應用程序。在我的一個視圖中,我有一些基本的報表數據顯示在tableview中。MvvmCross ViewModel從左側過渡

當觸摸表格行時,通過調用ShowViewModel傳遞一個Dictionary中的某些參數來顯示包含詳細報告的新視圖。這工作正常。

當用戶向左或向右滑動時,應用程序需要顯示原始列表中下一個或上一個項目的詳細報告。我通過更新一些參數並再次調用ShowViewModel來做到這一點。這背後的邏輯工作正常。

我的問題; ShowViewModel爲來自右側的新視圖提供動畫。當用戶向左滑動時這是完美的。但是,當向右滑動時,它似乎不符合直覺。我如何使ShowViewModel動畫或從左側過渡?

回答

2

這是解決方案,我能想出以下的安德烈N.在回答很有幫助指針在我選擇了結束TransitionFlipFromRight和TransitionFlipFromLeft在詳細報告之間滾動時。希望對其他人有用。

我已經有一個從MvxModalSupportTouchViewPresenter

public class BedfordViewPresenter : MvxModalSupportTouchViewPresenter 

繼承在這一類,我添加MvxPresentationHint的特性的演示課。

private MvxPresentationHint _presentationHint; 

在方法的重寫ChangePresentation上述屬性用於存儲在參數傳遞

public override void ChangePresentation (MvxPresentationHint hint) 
    { 
     _presentationHint = hint; 
     base.ChangePresentation (hint); 
    } 

兩個新MvxPresentationHint類被宣佈(參見下文)

在演示者類的顯示方法被覆蓋

public override void Show(IMvxTouchView view) 
    { 
     if (_presentationHint is FlipFromRightPresentationHint) { 
      var viewController = view as UIViewController; 
      MasterNavigationController.PushControllerWithTransition (viewController, UIViewAnimationOptions.TransitionFlipFromRight); 

     } 
     else 
      if (_presentationHint is FlipFromLeftPresentationHint) { 
       var viewController = view as UIViewController; 
       MasterNavigationController.PushControllerWithTransition (viewController, UIViewAnimationOptions.TransitionFlipFromLeft); 
      } 
      else { 
       base.Show (view); 
      } 

     _presentationHint = null; 
    } 

新類t帽子提供了擴展,一個UINavigationController與方法PushControllerWithTransition

public static class UINavigationControllerExtensions 
{ 
    public static void PushControllerWithTransition(this UINavigationController 
     target, UIViewController controllerToPush, 
     UIViewAnimationOptions transition) 
    { 
     UIView.Transition(target.View, 0.75d, transition, delegate() { 
      target.PushViewController(controllerToPush, false); 
     }, null); 
    } 
} 

創建的所有需要​​,現在被定義爲兩個新MvxPresentationHint類派生。這些屬於你的核心類庫項目,而不是iOS應用程序項目。

public class FlipFromLeftPresentationHint : MvxPresentationHint 
{ 
    public FlipFromLeftPresentationHint() 
    { 
    } 
} 

public class FlipFromRightPresentationHint: MvxPresentationHint 
{ 
    public FlipFromRightPresentationHint() 
    { 
    } 
} 

我希望這是別人試圖做類似的事情幫助

+0

感謝您的解釋@JDibble。我正試圖創建一個從左到右的簡單滑動過渡。你知道這是否可以使用UIViewAnimationOptions? – doorman 2014-12-02 12:48:27

2

如果你看看MvvmCross源代碼here你看到的默認行爲是如何顯示您需要更改ViewControllers

,通過做類似如下: How to change the Push and Pop animations in a navigation based app

的是,一個想法是有一個自定義視圖主持人和捕捉導航到特定視圖模型(覆蓋展(IMvxTouchView視圖))

,或者從UINavigationController的可能派生,它設置爲MvvmCross使用它(看向MvxSetup),和在某些事件上更迭過渡到特定視圖

與此類似問題 How to specify view transitions on iPhone

+0

安德烈,感謝您的幫助,您強調,我調查的區域,並能創建一個工作解決方案最後,當在詳細報告之間滾動時,我選擇了TransitionFlipFromRight和TransitionFlipFromLeft。見下面的答案。 – JDibble 2014-10-13 11:46:47