改变UIViewController的push方式
2014-03-05 16:35
176 查看
UIViewController的push默认的是从右往左压入栈,但是有时我们需要其他的方式例如,是从左往右压入栈。还有其他各种方式,如下
方法一:是通过给导航栏下要压入栈的控制器对应的view的layer添加动画
- (IBAction)toPersonalCenterViewControllerAction:(id)sender {
UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
PersonalCenterViewController *vc = [board instantiateViewControllerWithIdentifier:@"PersonalCenterViewController"];
CATransition *transition = [CATransition animation];
transition.duration = .5f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionPush;push方法
transition.subtype = kCATransitionFromLeft;从左到右
transition.delegate = self;
[self.controller.navigationController.view.layer addAnimation:transition forKey:nil];
[self.controller.navigationController pushViewController:vc animated:YES];
}
对应的动画效果,还有对应的动画方向如下
transition.type
/* Common transition types. */
CA_EXTERN NSString * const kCATransitionFade
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionMoveIn
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionPush
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionReveal
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
transition.subtype
/* Common transition subtypes. */
CA_EXTERN NSString * const kCATransitionFromRight
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromLeft
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromTop
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromBottom
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
方法二:通过自定义navigationController
#import <UIKit/UIKit.h>
@interface CustomViewController : UINavigationController
@end
@implementation CustomViewController
-(UIViewController * )popViewControllerAnimated:(BOOL)animated
{
if (animated) {
[UIViewbeginAnimations:@"1"context:nil];
[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];
[UIViewsetAnimationDuration:1];
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:self.viewcache:NO];
[UIViewcommitAnimations];
}
return [superpopViewControllerAnimated:animated];
}
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (animated) {
[UIViewbeginAnimations:@"2"context:nil];
[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];
[UIViewsetAnimationDuration:2];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlDownforView:self.viewcache:NO];
[UIViewcommitAnimations];
}
[super pushViewController:viewController animated:animated];
}
@end
方法一:是通过给导航栏下要压入栈的控制器对应的view的layer添加动画
- (IBAction)toPersonalCenterViewControllerAction:(id)sender {
UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
PersonalCenterViewController *vc = [board instantiateViewControllerWithIdentifier:@"PersonalCenterViewController"];
CATransition *transition = [CATransition animation];
transition.duration = .5f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionPush;push方法
transition.subtype = kCATransitionFromLeft;从左到右
transition.delegate = self;
[self.controller.navigationController.view.layer addAnimation:transition forKey:nil];
[self.controller.navigationController pushViewController:vc animated:YES];
}
对应的动画效果,还有对应的动画方向如下
transition.type
/* Common transition types. */
CA_EXTERN NSString * const kCATransitionFade
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionMoveIn
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionPush
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionReveal
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
transition.subtype
/* Common transition subtypes. */
CA_EXTERN NSString * const kCATransitionFromRight
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromLeft
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromTop
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromBottom
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
方法二:通过自定义navigationController
#import <UIKit/UIKit.h>
@interface CustomViewController : UINavigationController
@end
@implementation CustomViewController
-(UIViewController * )popViewControllerAnimated:(BOOL)animated
{
if (animated) {
[UIViewbeginAnimations:@"1"context:nil];
[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];
[UIViewsetAnimationDuration:1];
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:self.viewcache:NO];
[UIViewcommitAnimations];
}
return [superpopViewControllerAnimated:animated];
}
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (animated) {
[UIViewbeginAnimations:@"2"context:nil];
[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];
[UIViewsetAnimationDuration:2];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlDownforView:self.viewcache:NO];
[UIViewcommitAnimations];
}
[super pushViewController:viewController animated:animated];
}
@end
相关文章推荐
- ios 改变push方向,可以把present改为push方式
- 改变push动画方式
- 数据盾吕途:要保证数据的安全,改变存储方式才是关键
- 改变的只是爱的方式
- 通过修改注册表改变txt文件的默认打开方式
- 计算机网络改变了人们的娱乐方式
- 如何改变FTP查看方式
- iOS-改变UITextField的Placeholder颜色的三种方式
- Spring Tool Suit 如何改变页面的编码方式(一般默认的时iso-8859-1改为utf-8)
- ios开发navigationController pushViewController 方式多次跳转 怎么返回到最上层,怎么返回到指定的某一层
- 人生若无法改变位置,则去改变态度和方式
- 乔布斯改变世界的10种方式
- CrystalReport的导出“Push”方式
- iOS --切换控制器方式 push / modal
- ios开发 判断当前ViewController是push还是present的方式显示的
- 地理位置改变世界的十种方式
- 地理位置改变世界的十种方式
- 地理位置改变世界的十种方式
- 有时间要学习一下 Caml ,改变一下思维方式
- 通过#pragma pack(n)改变C编译器的字节对齐方式