2013-02-19 2 views
1

Когда я открываю конкретное представление, я хочу изменить направление анимации слайда на -> справа налево вместо направления по умолчанию (слева направо).Изменить направление анимации перехода слайда налево

Я нашел решение для изменения перехода анимации. Хотя это флип-анимация, и я хочу изменить направление слайдов по умолчанию для навигационного контроллера.

var screen = new Screen(); 
NavigationController.PushViewController(screen, false); 

UIView.BeginAnimations(null,IntPtr.Zero); 
UIView.SetAnimationDuration(0.75); 
UIView.SetAnimationTransition(UIViewAnimationTransition.FlipFromLeft , NavigationController.View,true); // <-- Change the animation 
UIView.CommitAnimations(); 

Примечание: Я использую MonoTouch/C#

ответ

1

Извините, я опять ничего не получил MonoTouch/C#, но я реализовал такое же поведение в ObjC, и он эмулирует скольжение отлично. В этом случае он используется для эмуляции поведения сползания при переходе на представление с помощью вкладки. Может быть, это полезно:

- (void)hitBack 
{ 
    // Get the views. 
    UIView * fromView = self.tabBarController.selectedViewController.view; 
    UIView * toView = ((UIViewController *)[self.tabBarController.viewControllers objectAtIndex:0]).view; 

    // Get the size of the view area. 
    CGRect viewSize = fromView.frame; 

    // Add the to view to the tab bar view. 
    [fromView.superview addSubview:toView]; 

    // Position it off screen. 
    toView.frame = CGRectMake(-320 , viewSize.origin.y, 320, viewSize.size.height); 

    [UIView animateWithDuration:0.4 animations: 
    ^{ 
     // Animate the views on and off the screen. This will appear to slide. 
     fromView.frame =CGRectMake(320 , viewSize.origin.y, 320, viewSize.size.height); 
     toView.frame =CGRectMake(0, viewSize.origin.y, 320, viewSize.size.height); 
    } 
        completion:^(BOOL finished) 
    { 
     if (finished) 
     { 
      // Remove the old view from the tabbar view. 
      [fromView removeFromSuperview]; 

      //change tab 
      self.tabBarController.selectedIndex = 0; 
     } 
    }]; 
} 

В C#:

void HitBack() 
{ 
    // Get the views. 
    var fromView = tabBarController.SelectedViewController.View; 
    var toView = tabBarController.ViewControllers [0].View; 

    // Get the size of the view area. 
    var viewSize = fromView.Frame; 

    // Add the to view to the tab bar view. 
    fromView.Superview.AddSubview (toView); 

    // Position it off screen. 
    toView.Frame = new RectangleF (-320 , viewSize.Y, 320, viewSize.Height); 

    UIView.Animate (0.4,() => { animateWithDuration:0.4 animations: 
     // Animate the views on and off the screen. This will appear to slide. 
     fromView.Frame = new RectangleF (320 , viewSize.Y, 320, viewSize.Height); 
     toView.Frame =new RectangleF (0, viewSize.Y, 320, viewSize.Height); 
    }, (bool finished) => { 
     if (finished){ 
      // Remove the old view from the tabbar view. 
      fromView.RemoveFromSuperview(); 

      //change tab 
      tabBarController.SelectedIndex = 0; 
     }); 
} 
1

Это то, что вы хотите ниже. Это переход от представления табуляции. Надеюсь, это поможет некоторым людям:

protected void HandleLeftSwipe(UISwipeGestureRecognizer recognizer) 
{ 
    if (this.TabBarController.SelectedIndex != 4) { 
     UIView fromView = this.TabBarController.SelectedViewController.View; 
     UIView toView = this.TabBarController.ViewControllers[this.TabBarController.SelectedIndex+1].View; 

     // Get the size of the view area. 
     var viewSize = fromView.Frame; 

     // Add the to view to the tab bar view. 
     fromView.Superview.AddSubview (toView); 

     var minAlpha = -320.0; 
     var maxAlpha = 320.0; 
     var midAlpha =0.0; 
     // Position it off screen. 
     toView.Frame = new CGRect (maxAlpha , viewSize.Y, maxAlpha, viewSize.Height); 
     UIView.Animate (.3,.1, UIViewAnimationOptions.CurveEaseOut , 
      () => { 
       fromView.Frame = new CGRect (minAlpha , viewSize.Y, maxAlpha, viewSize.Height); 
       toView.Frame =new CGRect (midAlpha, viewSize.Y, maxAlpha, viewSize.Height); 
      }, 
      () => { 
       fromView.RemoveFromSuperview(); 
       this.TabBarController.SelectedIndex = this.TabBarController.SelectedIndex + 1; 
      } 
     ); 
    } 
} 

protected void HandleRightSwipe(UISwipeGestureRecognizer recognizer) 
{ 
    if (this.TabBarController.SelectedIndex != 0) { 
     UIView fromView = this.TabBarController.SelectedViewController.View; 
     UIView toView = this.TabBarController.ViewControllers[this.TabBarController.SelectedIndex-1].View; 

     // Get the size of the view area. 
     var viewSize = fromView.Frame; 

     // Add the to view to the tab bar view. 
     fromView.Superview.AddSubview (toView); 

     var minAlpha = -320.0; 
     var maxAlpha = 320.0; 
     var midAlpha =0.0; 
     // Position it off screen. 
     toView.Frame = new CGRect (minAlpha , viewSize.Y, maxAlpha, viewSize.Height); 
     UIView.Animate (.3,.1, UIViewAnimationOptions.CurveEaseOut , 
      () => { 
       fromView.Frame = new CGRect (maxAlpha , viewSize.Y, maxAlpha, viewSize.Height); 
       toView.Frame =new CGRect (midAlpha, viewSize.Y, maxAlpha, viewSize.Height); 
      }, 
      () => { 
       fromView.RemoveFromSuperview(); 
       this.TabBarController.SelectedIndex = this.TabBarController.SelectedIndex - 1; 
      } 
     ); 
    } 
}