iOS 不使用UINavigationController实现Push动画
来源:互联网 发布:轮播图原生js代码 编辑:程序博客网 时间:2024/06/01 10:01
转自廖雪峰
在iOS开发中,如果使用UINavigationController,配合Storyboard+Push模式的Segue,默认情况下,可以直接实现左右推出的View切换效果。
但是,如果不使用UINavigationController时,把Segue设置为Push,运行就会直接报错,而Model模式的Segue只有Cover Vertical,Flip Horizontal,Cross Dissolve和Partial Curl这4种模式,没有Push模式。
如果要在自定义的View切换动画中使用Push模式,唯一的方法是把Segue设置为Custom,然后自定义Push动画。
自定义View切换动画效果的实现方式是从UIStoryboardSegue派生一个类,然后在-(void)perform
方法中自己实现动画。
经过多次Google,找到多种实现方式,经比较后发现,最简单最靠谱的Push动画实现如下:
- (void)perform{ UIViewController* source = (UIViewController *)self.sourceViewController; UIViewController* destination = (UIViewController *)self.destinationViewController; CGRect sourceFrame = source.view.frame; sourceFrame.origin.x = -sourceFrame.size.width; CGRect destFrame = destination.view.frame; destFrame.origin.x = destination.view.frame.size.width; destination.view.frame = destFrame; destFrame.origin.x = 0; [source.view.superview addSubview:destination.view]; [UIView animateWithDuration:.25 animations:^{ source.view.frame = sourceFrame; destination.view.frame = destFrame; } completion:^(BOOL finished) { [source presentViewController:destination animated:NO completion:nil]; }];}
以上就是从右向左切换View动画的实现,关键代码是:
sourceFrame.origin.x = -sourceFrame.size.width;
和
destFrame.origin.x = destination.view.frame.size.width;
将旧的View向左移动,新的View从最右开始进入。
最后,在动画结束后,手动将当前View切换到新的View:
[source presentViewController:destination animated:NO completion:nil];
因为动画效果我们已经自己实现了,所以切换到新的View就不要使用动画了。
简单修改上面的代码,就可以实现从左到右的Push切换动画:
CGRect sourceFrame = source.view.frame;sourceFrame.origin.x = sourceFrame.size.width;CGRect destFrame = destination.view.frame;destFrame.origin.x = -destination.view.frame.size.width;destination.view.frame = destFrame;
利用Custom模式的Segue,可以实现任意切换动画效果,对于简单的非3D动画,简单的几行代码即可实现。
0 0
- iOS 不使用UINavigationController实现Push动画
- iOS开发--不使用UINavigationController实现Push动画
- IOS UINavigationController Push 动画
- UINavigationController Push动画
- UINavigationController的push动画效果
- UINavigationController的push动画效果
- iOS 隐藏tabBar UITabBarController 以及 于UINavigationController 配合使用 push
- iOS不使用UINavigationController压入新视图
- iOS 转场动画简单实现 (push)
- UINavigationController自定义,push和pop动画
- UINavigationController自定义,push和pop动画
- ios开发:UINavigationController反方向滑动push
- IOS基础-UINAVIGATIONCONTROLLER-不写代码实现分层显示
- ios动画push
- ios push pop动画
- [iOS]UINavigationController 简单实现
- IOS的UINavigationController使用
- 实现push默认动画
- Codeforces Round #295 (Div. 2) C. DNA Alignment(数学)
- Linux芯片级移植与底层驱动(基于3.7.4内核)
- 维棠播放器
- CDN初探
- STL算法 ---------- Heap算法
- iOS 不使用UINavigationController实现Push动画
- GCD多线程
- HDU 1028 Ignatius and the Princess III
- 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- Ubuntu 下安装 vim 时出现无法安装的问题
- 云计算的原动力
- 容器第四课,JDK源代码分析,自己实现LinkedList,双向链表的概念_节点定义
- 维棠播放器
- 2014年IT毕业生——年终总结与生存调查报告