需要引入的库:#import <QuartzCore/QuartzCore.h>
有2个导航控制器第一个是RootViewControler,第二个是SecondViewController
在第一个页面添加一个按钮,按钮的点击事件就是使用导航控制器push到第二个页面
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"演示给导航控制器加动画效果";
self.view.backgroundColor = [UIColor grayColor];
UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame = CGRectMake(10, 20, 300, 30);
[btn1 setTitle:@"跳转" forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1];
}
- (void) btnClick
{
// 跳转的页面
SecondViewController *svc = [[SecondViewController alloc] init];
// 声明一个CAAnimation
CATransition *transition = [CATransition animation];
// 设置代理(通过代理可以进行动画开始和结束的回调函数)
transition.delegate = self;
// 周期
transition.duration = 0.8;
// 类型 立方体
transition.type = @"cube";
// 设子副类型
transition.subtype = kCATransitionFromLeft;
// 设置曲线为进出加速
transition.timingFunction = UIViewAnimationCurveEaseInOut;
// 把动画加到导航控制器上
[self.navigationController.view.layer addAnimation:transition forKey:@"animation"];
// 跳转到第二个页面
[self.navigationController pushViewController:svc animated:NO];
}
// 动画开始的回调函数
- (void)animationDidStart:(CAAnimation *)anim
{
}
// 动画结束的回调函数
- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
}