在两个页面间翻转设置Animation动作的一些总结

简介:

今天碰到两个页面之间翻转的动作设计问题,发现了一些问题,故做个总结,很多都写在注释部分:

1、首先,我们来手动创建两个view以及相应的viewController。是手动,不是用IB

(1)刚开始只加载一个view(第二个),若两个同时加载,第二个页面可能不能完全被遮挡。第二个页面可以通过翻转来显示。

[window addSubview:secodViewController.view];

 

2、要求:每个view页面都有一个按钮,按下之后切换到另一个页面,要求有炫一点的切换效果,故要对Animation属性进行一些设置

 (1)helloWorldViewController.m:

复制代码
 1
2 mySecondViewController *SecondViewController;
3 - (void) btnClicked:(id)sender
4 {
5 SecondViewController=[[mySecondViewController alloc]
6 initWithNibName:@"SecondViewController"
7 bundle:nil];
8
9 //---创建一个翻转页面的动画---
10 //---这个动画的forView属性是UIView,应用与整个view,跟有几个页面无关,只有一个页面仍旧有效果出来---
11 [UIView beginAnimations:@"flipping view" context:nil];
12 [UIView setAnimationDuration:1];
13 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
14 [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft//与Left相对
15 forView:self.view.superview cache:YES];//forView:UIView
16
17 //---remove the current view; essentially hiding the view---
18
19 [self.view removeFromSuperview];
//不加这句也可以正常运行,不过程序会一直叠加view,内存浪费!
21 [UIView commitAnimations];//执行动画
22
23
24 }
复制代码

 

(2)secondViewController.m:

复制代码
 1 -(IBAction) btnClicked:(id)sender
2 {
3 helloWorldViewController=[[helloWorldApp alloc]initWithNibName:@"helloWorldApp"
4 bundle:nil];
5 //实例化一个控制器,因为下面addSubView要用到
6 UIAlertView *alert=[[UIAlertView alloc]initWithTitle:nil
7 message:@"你按了SecondView的按钮!"
8 delegate:self
9 cancelButtonTitle:@"done"
10 otherButtonTitles:nil];
11 [alert show];
12 [alert release];
13 //---创建一个翻转页面的动画---
14 [UIView beginAnimations:@"flipping view" context:nil];
15 [UIView setAnimationDuration:1];
16 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
17 [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight//与Left相对
18 forView:self.view.superview cache:YES];
19
20 //---remove the current view; essentially hiding the view---
21 [self.view addSubview:helloWorldViewController.view];
22
23 [UIView commitAnimations];//执行动画
24
25
26 }
复制代码

UIView是UIWindow、UIScrollBar等的超类,所以这里的self.view.superview就是UIView。所以这里的Animation动画是针对UIView而言的,而不是当前view页面,我觉得这点是最关键的。只有理解了这点,对与该remove还是addsubview就不会晕了。

其实,道理很简单,用土话总结一下:先加载ViewB->在ViewB的Action里面设置好动画,把ViewA加到ViewA (addSubView)->转到了ViewA,设置动画,removeFromSuperView(这里的super就是指ViewA,因为刚刚是SubView,Sub,子,与父对应)->转到ViewA.....循环下去。用更土的话讲,就是第二加载的View要自杀完才回到第一加载的View。

OVER,以后再慢慢加深理解

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2012/03/01/Animation.html,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 监控 数据可视化
Scikit-learn与可视化:让机器学习结果更直观
【4月更文挑战第17天】本文探讨了如何使用Scikit-learn和可视化工具使机器学习结果更直观。Scikit-learn作为Python的开源机器学习库,结合Matplotlib、Seaborn等可视化库,便于数据探索、模型训练过程监控及结果展示。通过示例代码,展示了数据探索的pairplot、模型训练准确率曲线的绘制以及聚类结果的散点图,强调了可视化在提升模型理解度和应用普及性上的作用。随着可视化技术进步,机器学习将变得更直观易懂。
|
安全 Java 程序员
深入理解jvm - 类加载过程
深入理解jvm - 类加载过程
241 0
|
编译器
[√]添加预处理的2个不同方式:target_compile_definitions / add_definitions
[√]添加预处理的2个不同方式:target_compile_definitions / add_definitions
1080 0
|
缓存 移动开发 运维
mPaaS云平台运维系列之—移动发布产品介绍
实时发布服务(Mobile Delivery Service,MDS)是 mPaaS 平台的核心基础服务组件之一,提供版本升级包、热修复包、H5 离线包的管理和发布服务,同时支持开关配置、白名单、发布规则管理功能。在客户端集成实时发布服务功能后,用户可以在 mPaaS 插件中生成新的包,然后在实时发布控制台发布新包,客户端收到新包并进行升级。实时发布服务还支持通过白名单进行灰度发布,可以使用高级过滤规则,比如指定机型,来进行更精准的灰度发布。
1458 0
mPaaS云平台运维系列之—移动发布产品介绍
antd组件库封装10-函数类型和类型推断
antd组件库封装10-函数类型和类型推断
206 0
antd组件库封装10-函数类型和类型推断
|
存储 编译器 C语言
【C++】类和对象(中)
类的6个默认成员函数、运算符的重载、日期类的实现和const成员。
检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离
检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。
464 0
|
前端开发
vue-axios异步请求
axios概述 axios是一个基于 promise 的 HTTP 库, 主要用于:发送异步请求获取数据。 常见的方法: axios(config) axios.get(url, [config])
|
存储 缓存 Oracle
【数据库设计与实现】第1章:空间管理与数据布局
空间管理与数据布局 设计原则数据库设计数据布局和空间管理应当考虑哪些因素呢?又有哪些设计原则?本章先提出问题,看有哪些因素要考虑,然后选取Oracle和MySQL这2款最流行的数据库,看看它们是如何进行空间管理的。我们先看看有哪些因素要考虑:数据最终要反映到持久设备上,空间管理首先要考虑持久设备(如磁盘)的物理特性,考虑如何组织数据才能最大化地发挥存储设备的效率;如何协调平衡多样化的数据,如超大的
【数据库设计与实现】第1章:空间管理与数据布局
|
JavaScript 前端开发
JavaScript学习笔记(十四) 继承
JavaScript学习笔记(十四) 继承
215 0