Xamarin.forms 页面之间导航的自定义动画?

Posted

技术标签:

【中文标题】Xamarin.forms 页面之间导航的自定义动画?【英文标题】:custom animation for navigation between pages Xamarin.forms? 【发布时间】:2015-04-26 03:25:36 【问题描述】:

我使用 Xamarin.Forms 创建了简单的应用程序,需要将导航设置为左右的上下状态

【问题讨论】:

有一个discussion on Xamarin forums 【参考方案1】:

如果您想要上下动画(不是自定义动画),您可以简单地使用Navigation.PushModalAsync(page) 来呈现页面。


此外,我刚刚编写了一个自定义渲染器来更改 ios 上的动画。

[assembly: ExportRenderer(typeof(NavigationPage), typeof(AnimationNavigationRenderer))]

class AnimationNavigationRenderer : NavigationRenderer

    public override void PushViewController(UIViewController viewController, bool animated)
    
        if (animated)
        
            // Alternative way with different set of trannsition
            /*
            UIView.Animate(0.75, () =>
            
                UIView.SetAnimationCurve(UIViewAnimationCurve.EaseInOut);
                base.PushViewController(viewController, false);
                UIView.SetAnimationTransition(UIViewAnimationTransition.CurlUp, this.View, false);
            );
             */
            var transition = CATransition.CreateAnimation();
            transition.Duration = 0.75;
            transition.Type = CAAnimation.TransitionPush;

            View.Layer.AddAnimation(transition, null);
            base.PushViewController(viewController, false);
        
        else
        
            base.PushViewController(viewController, false);
        
    

    public override UIViewController PopViewController(bool animated)
    
        if (animated)
        
            // Alternative way with different set of trannsition
            /*                UIView.Animate(0.75, () =>
            
                UIView.SetAnimationCurve(UIViewAnimationCurve.EaseInOut);
                UIView.SetAnimationTransition(UIViewAnimationTransition.CurlDown, this.View, false);
            );
            */

            var transition = CATransition.CreateAnimation();
            transition.Duration = 0.75;
            transition.Type = CAAnimation.TransitionFromTop;

            View.Layer.AddAnimation(transition, null);

            return base.PopViewController(false);
        
        else
        
            return base.PopViewController(false);
        
    

https://gist.github.com/alexlau811/e12a8c126e6e082a5017

【讨论】:

感谢 Alex 帮助它运行良好现在我需要知道单击页面时的事件并向上移动手指推动下一页。 我应该触发什么事件?? 你的意思是你想让用户向上拖动整个页面并在下面显示另一个页面? 这正是我需要的 我似乎无法让它工作。我已将您的代码复制到 AnimationNavigationRenderer.cs 文件中,并将其放在 iOS/Renderers 文件夹中。是否需要任何其他步骤?我将 transition.Duration 更改为 5,但速度相同。我正在使用await CURRENT_PAGE.Navigation.PushModalAsync(NEXT_PAGE, true);Navigation.PopModalAsync();

以上是关于Xamarin.forms 页面之间导航的自定义动画?的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.forms 中的多个页面之间导航?

Xamarin Forms - 在页面打开时填充自定义控件

在 Xamarin.Forms 中使用 MVVM 进行页面导航

从导航堆栈中删除页面 - xamarin.forms

Xamarin.Forms 中 Picker 的自定义渲染器

更改 Xamarin Forms Android 导航页面颜色(按钮和返回)