在uwp仿IOS的页面切换效果

有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码。

先分析IOS的页面切换。用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画。导航到新页面时,使用页面前进的动画。

UWP自带很多切换效果,位于 Windows.UI.Xaml.Media.Animation 中。与苹果的切换效果最接近的是 PaneThemeTransition (而不是EdgeUIThemeTransition)。

PaneThemeTransition的效果是从它的Edge属性规定的方位平移进入,从Edge属性规定的方位平移退出。

苹果的切换方式是:

新建和前进:从右边平移进入,从左边平移退出。

返回:从左边平移进入,从右边平移退出。

分析完这些,大致的实现步骤就明了了。

在页面初始化时添加PaneThemeTransition

在进入动画播放前判断导航方式并设定Edge属性。不考虑刷新这种情况,如果是返回就是Left,否则是Right。

在退出动画播放前判断导航方式并设定Edge属性。不考虑刷新这种情况,如果是返回就是Right,否则是Left。

照这个思路写出来的代码是这样的:

 1 Imports Windows.UI.Xaml.Media.Animation
 2 ‘‘‘ <summary>
 3 ‘‘‘ 移植苹果的应用时使用。这种页面自带苹果导航动画和手势。
 4 ‘‘‘ </summary>
 5 Public MustInherit Class AppleAnimationPage
 6     Inherits Page
 7     Dim PaneAnim As New PaneThemeTransition With {.Edge = EdgeTransitionLocation.Right}
 8     Sub New()
 9         MyBase.New
10         Transitions = New TransitionCollection
11         Transitions.Add(PaneAnim)12     End Sub
13     Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
14         PaneAnim.Edge = If(e.NavigationMode = NavigationMode.Back, EdgeTransitionLocation.Left, EdgeTransitionLocation.Right)
15         MyBase.OnNavigatedTo(e)
16     End Sub
17     Protected Overrides Sub OnNavigatingFrom(e As NavigatingCancelEventArgs)
18         PaneAnim.Edge = If(e.NavigationMode <> NavigationMode.Back, EdgeTransitionLocation.Left, EdgeTransitionLocation.Right)
19         MyBase.OnNavigatingFrom(e)
20     End Sub
21 End Class

接下来是写手势代码。首先设置一下手势的模式为横向平移,然后对ManipulationCompleted事件进行处理。这里判断的逻辑是不唯一的。我自己想了一种判断的方法,代码写上之后是这样的:

 1 Imports Windows.UI.Xaml.Media.Animation
 2 ‘‘‘ <summary>
 3 ‘‘‘ 移植苹果的应用时使用。这种页面自带苹果导航动画和手势。
 4 ‘‘‘ </summary>
 5 Public MustInherit Class AppleAnimationPage
 6     Inherits Page
 7     Dim PaneAnim As New PaneThemeTransition With {.Edge = EdgeTransitionLocation.Right}
 8     Sub New()
 9         MyBase.New
10         Transitions = New TransitionCollection
11         Transitions.Add(PaneAnim)
12         ManipulationMode = ManipulationModes.TranslateX
13     End Sub
14     Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
15         PaneAnim.Edge = If(e.NavigationMode = NavigationMode.Back, EdgeTransitionLocation.Left, EdgeTransitionLocation.Right)
16         MyBase.OnNavigatedTo(e)
17     End Sub
18     Protected Overrides Sub OnNavigatingFrom(e As NavigatingCancelEventArgs)
19         PaneAnim.Edge = If(e.NavigationMode <> NavigationMode.Back, EdgeTransitionLocation.Left, EdgeTransitionLocation.Right)
20         MyBase.OnNavigatingFrom(e)
21     End Sub
22     Private Sub AppleAnimationPage_ManipulationCompleted(sender As Object, e As ManipulationCompletedRoutedEventArgs) Handles Me.ManipulationCompleted
23         Dim trans = e.Cumulative.Translation
24         Dim DeltaX As Double = Math.Abs(trans.X)
25         If Math.Abs(trans.Y) * 3 < DeltaX AndAlso DeltaX > 200 Then
26             If trans.X > 0 Then
27                 If Frame.CanGoBack Then Frame.GoBack()
28             Else
29                 If Frame.CanGoForward Then Frame.GoForward()
30             End If
31         End If
32     End Sub
33 End Class

这些代码在我的Lumia 1520进行过测试,有比较理想的切换效果。

时间: 2024-08-05 04:32:35

在uwp仿IOS的页面切换效果的相关文章

iOS开源项目 页面切换效果TransitionAnimation

RT:页面切换效果 https://github.com/xietao3/RMPZoomTransitionAnimatorDemo#rmpzoomtransitionanimatordemo 版权声明:本文为博主原创文章,未经博主允许不得转载.

[Swift通天遁地]九、拔剑吧-(7)创建旋转和弹性的页面切换效果

本文将演示使用第三方类库,创建旋转和弹性的页面切换效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'GuillotineMenu' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文件[

[Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果

本文将演示使用第三方类库,创建页面之间的气泡式切换效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'BubbleTransition' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文

用Fragment实现Tab页面切换效果初步总结

前言: 最近在Android项目中需要在活动中实现多页面切换的功能,第一次是实现的过程中,是让Activity同时去加载三个界面的,通过点击tab按钮对页面设置隐藏和显示,实现页面切换效果,但是后面发现这种实现方式其实存在很多问题: 首先,同时去加载三个页面,切换Activity的速度会变慢,尤其是布局中如果有很多ImageView,ImageButton等使用到图片资源的控件时,切换效果非常不好: 其次,由于使用了很多图片资源,在退出Activity的时候,像Drawable,Bitmap等一

html5各种页面切换效果和模态对话框

页面动画:data-transition 属性可以定义页面切换是的动画效果.例如:<a href="index.html" data-transition="pop">I'll pop</a>data-transition 参数表:参数说明slide 从右侧向左滑入页面slideup 从底部向上滑入slidedown 从上向下滑入pop 从中心渐显展开fade 渐显flip 翻转备注:如果想要在目标页面中显示后退按钮,可以在链接中加入 dat

仿百度首页选项卡切换效果

效果:http://hovertree.com/texiao/jquery/71/ 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery仿百度首页选项卡切换效果 - 何问起</title> <base ta

js页面切换效果学习(基础)

css代码 .div1{ width: 130px; height: 130px; }.div2{ width: 20px;height:160px; margin-top: 0px; float: left;}body{ font-size: 12px;}.div2 li{ list-style-type: none; margin-top: 3px; background-color: wheat; height: 40px; text-align: center; padding-top:

基于html5和css3响应式全屏滚动页面切换效果

分享一款全屏响应式的HTML5和CSS3页面切换效果.这个页面布局效果对于那些页面要求固定100%高度和宽度的网站和APP来说是十分有用的.效果图如下: 在线预览   源码下载 HTML wrapper div的class为st-container,里面包含作为导航按钮的radio和用于页面切换的面板st-scroll. <div class="st-container"> <input type="radio" name="radio-

[Jquery]tab页面切换效果

思路:取得头部和内容的div,头部当前点击的高亮,其余的去除高亮,并通过index()方法获得当前点击的索引,然后内容div通过.eq(index)显示和隐藏 优化:当前做法,从第一个快速移到最后一个,中间每个内容都会相继显示出来.比较好的用户体验是,从某个标签迅速移到另一个标签,中间不想看的内容不显示出来.这就需要延迟切换效果(每次划每次加载信息,必将影响性能) 使用定时器:setTimeout(500毫秒),每次鼠标滑过的时候,先判断定时器存不存在,存在的话先清除定时器,然后开启定时器,执行