[UWP小白日记-9]页面跳转过度动画(二)

简介: 原文:[UWP小白日记-9]页面跳转过度动画(二)又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法。 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写了好几次。
原文: [UWP小白日记-9]页面跳转过度动画(二)

又打算动手写了

[UWP小白日记-6]页面跳转过度动画
上次写的,这次随着学习的进度使用新的玩法。
最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写了好几次。

发条弹幕压压惊Σ(っ °Д °;)っ

正文

0.两个动画的定义
TIP:说明下这里的childrenFrameCompositeTransform这是给Frame的CompositeTransform的名字
以前从来不定义名字,应为有取名综合征。最近我又嫌弃这搞法太长,经常打字缺斤少两的。

Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"

现在短了多清爽

<!--#region 子框架进入动画-->
        <Storyboard x:Name="childrenInStoryboard"
                    x:FieldModifier="public"
                    Completed="childrenInStoryboard_Completed">
            <DoubleAnimation x:Name="childrenInDA"
                             Storyboard.TargetName="childrenFrameCompositeTransform"          
                             Storyboard.TargetProperty="TranslateX"
                             To="0"
                             Duration="0:0:0.5">
                <DoubleAnimation.EasingFunction>
                    <QuarticEase  EasingMode="EaseIn"/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
        <!--#endregion-->
        <!--#region 子框架退出动画-->
        <Storyboard x:Name="childrenOutStoryboard"
                    x:FieldModifier="public"
                    Completed="childrenOutStoryboard_Completed">
            <DoubleAnimation x:Name="childrenOutDA"
                             Storyboard.TargetName="childrenFrameCompositeTransform"
                             Storyboard.TargetProperty="TranslateX"
                             From="0"
                             Duration="0:0:0.5">
                <DoubleAnimation.EasingFunction>
                    <QuarticEase  EasingMode="EaseInOut"/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
        <!--#endregion-->

1.使用Frame本身就有的Navigating和navigated事件来执行开闭动画。

        /// <summary>
        /// childrenFrame导航开始前
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void childrenFrame_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            childrenFrameCompositeTransform.TranslateX = 0;
            //1.设置childrenFrame导航进入动画
            EdgeUIThemeTransition inStoryoard = new EdgeUIThemeTransition();
            //2.只有在导航是新实例才执行动画
            if (e.NavigationMode == NavigationMode.New)
            {
                #region 系统定义的边缘UI
                //inStoryoard.Edge = EdgeTransitionLocation.Right;
                //TransitionCollection tc = new TransitionCollection();
                //tc.Add(inStoryoard);
                //childrenFrame.ContentTransitions = tc;
                #endregion
                #region 自定义动画
                childrenInDA.From = this.ActualWidth;
                childrenInStoryboard.Begin();
                #endregion
            }
        }
        /// <summary>
        /// 导航结束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void childrenFrame_Navigated(object sender, NavigationEventArgs e)
        {
            var tempPageE = e.Content as Page;
            switch (tempPageE.Tag.ToString())
            {
                case "安全页面":
                    (childrenFrame.Content as SafePage).BackEvent += MainPage_BackEvent;
                    break;
                default:
                    break;
            }
        }

2.在所有需要的退出的动画的页面实现BackEvert委托
例如:

public sealed partial class SafePage : Page
    {
        internal delegate void GoBackHandler();
        internal event GoBackHandler BackEvent;

        public SafePage()
        {
            this.InitializeComponent();
        }
    }

3.在MainPage.cs中实现MainPage_BackEvent

        /// <summary>
        /// 实现各个页面定义的委托
        /// </summary>
        private void MainPage_BackEvent()
        {
            //1.设置退出动画的TO属性
            childrenOutDA.To = this.ActualWidth;
            //2.动画开始
            childrenOutStoryboard.Begin();

        }

3.还有一点要在退出动画结束的时候重置一些数据

 /// <summary>
        /// childrenFrame退出动画结束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void childrenOutStoryboard_Completed(object sender, object e)
        {
            childrenFrame.ContentTransitions = null;
            childrenFrame.Content = null;
            childrenFrame.SetNavigationState(navInfo);
            childrenFrameCompositeTransform.TranslateX = 0;
        }

img_52d2d804f5906d12850ccf4b6f3fe6af.gif

顺手再来个双击退出

在Mainpage中注册后退管理事件

/// <summary>
        /// MainPage载入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            //1.注册后退管理
            SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
        }

TIP:虽然SystemNavigationManager.GetForCurrentView().BackRequested是系统级别的事件最好是+=了就-=我这里没这么做。因为我这个是当全局来用的。APP退出了也就没那必要了不是。

bool IsExit = false;
        /// <summary>
        /// 响应后退按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
        {
            if (childrenFrame.Content != null)
            {
                e.Handled = true;
                if (childrenFrame.CanGoBack)
                {
                    childrenFrame.GoBack();
                }
                else
                {
                    childrenOutDA.To = this.ActualWidth;
                    childrenOutStoryboard.Begin();
                }
            }
            else
            {
                if (e.Handled == false)
                {
                    if (IsExit)
                    {
                        //1.退出APP
                        Application.Current.Exit();
                    }
                    else
                    {
                        IsExit = true;
                        e.Handled = true;
                        ExitTipTextBlock.Text = "再按一次(,,•∀•)ノ゛ByeBye";
                        ExitTipBorder.Visibility = Visibility.Visible;
                        await Task.Delay(1500);
                        IsExit = false;
                        ExitTipBorder.Visibility = Visibility.Collapsed;
                    }
                }
                else
                {

                }
            }
        }

欢迎大家指点更好的方法。(o'ー'o)
这个办法在可以导航的时候时 执行的是childrenOutStoryboard动画,会导致在弹出页面中再次进行的导航后后退没有动画(按物理导航按钮时)

目录
相关文章
|
5月前
|
移动开发 前端开发 JavaScript
惊爆!一键解锁HTML父页面神秘技能,子页面Dialog华丽登场,让你的网页交互瞬间高大上,用户体验飙升!
【8月更文挑战第4天】在Web开发中,常需从父页面弹出子页面或对话框(Dialog)进行互动。HTML5虽引入了&lt;dialog&gt;元素,但许多开发者偏好使用自定义方案以获得更好的兼容性和样式控制。本示例利用HTML、CSS及JavaScript创建一个可弹出子页面的模态框:首先,在父页面中定义一个按钮触发弹出效果;接着,设置隐藏的模态框容器,内含一个iframe用于加载子页面;然后,通过CSS设定模态框样式;最后,借助JavaScript控制模态框的显示与隐藏。此方案灵活且易于定制,适用于多种应用场景。
129 12
|
6月前
|
前端开发
网页设计04 WEB端按钮设计技巧,交互规范参考资料,点击事件,什么是3:1 ,3:1 的介绍,网页设计牵扯的知识整理成口诀
网页设计04 WEB端按钮设计技巧,交互规范参考资料,点击事件,什么是3:1 ,3:1 的介绍,网页设计牵扯的知识整理成口诀
|
8月前
|
移动开发 HTML5
超级高大上HTML5引导页源码 动态效果更好看
超级高大上HTML5引导页源码 动态效果更好看
281 3
|
7月前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
152 0
|
8月前
|
移动开发 HTML5
高大上HTML5引导页源码 动态效果更好看
高大上HTML5引导页源码 动态效果更好看,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,
82 0
高大上HTML5引导页源码 动态效果更好看
|
8月前
|
XML Java Android开发
Android App开发动画特效之利用滚动器实现平滑翻页(附源码和演示 简单易懂)
Android App开发动画特效之利用滚动器实现平滑翻页(附源码和演示 简单易懂)
119 0
Android App开发动画特效之利用滚动器实现平滑翻页(附源码和演示 简单易懂)
|
8月前
|
XML Java Android开发
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
460 0
|
8月前
|
前端开发
前端知识笔记(二十)———简易弹窗制作
前端知识笔记(二十)———简易弹窗制作
83 0
|
开发工具
女朋友想要听歌,我反手用Flutter做了2个音乐播放器,给她拿捏了🎧
有很多小伙伴和我说,网上关于Flutter的音乐播放器资料太少了,我反手掉了10根头发给他们做了这样的音乐播放器,你就说得不得劲吧😎
女朋友想要听歌,我反手用Flutter做了2个音乐播放器,给她拿捏了🎧
|
JSON iOS开发 数据格式
iOS开发 - 关于启动页动画的杂谈
iOS开发 - 关于启动页动画的杂谈
266 0
iOS开发 - 关于启动页动画的杂谈

热门文章

最新文章