1.基本概念
//1.把svc添加为当前视图控制器的子视图控制器
[self addChildViewController:svc];
[svc release];
//2.查看当前视图控制器的子视图控制器 --> 数组
NSArray *childArr = self.childViewControllers;
NSLog(@"childArr = %@",childArr);
//显示子视图控制器的视图
NSArray *arr = self.childViewControllers;
//找到需要做处理的视图控制器
SecondViewController *svc = (SecondViewController *)[arr objectAtIndex:0];
[self.view addSubview:svc.view];
//removeFromSuperview&removeFromParentViewController
[svc.view removeFromSuperview];
//移除子视图控制器:移除后,原来的子视图控制器(svc)就不在当前视图控制器(self)的子视图控制器数组(self.childViewControllers)中了。
[svc removeFromParentViewController];
NSArray *arr1 = self.childViewControllers;
NSLog(@"arr1 = %@",arr1);
2.转场动画
// 转场动画 (layer层的动画)
- (void)buttonClick:(UIButton *)button
{
SecondViewController *svc = [[SecondViewController alloc] init];
/*
增加一个转场特效
xcode5 之前 需要导入QuartzCore.framework
导入头文件 <QuartzCore/QuartzCore.h>
xcode5之后 不需要导入 直接就可以用
*/
//首先创建一个转场动画对象
CATransition *animation = [CATransition animation];
/*
1.全局变量的形式
kCATransitionFade 交叉淡化过渡
kCATransitionMoveIn 新视图移到旧视图上面
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图
2.用字符串表示
fade //交叉淡化过渡(不支持过渡方向)
push //新视图把旧视图推出去
moveIn //新视图移到旧视图上面
reveal //将旧视图移开,显示下面的新视图
cube //立方体翻滚效果
oglFlip //上下左右翻转效果
suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)
//设置动画类型
animation.type = @"oglFlip";//字符串形式
//animation.type = kCATransitionFade;//可以写成全局变量的形式
//设置动画方向
/*
全局变量形式
kCATransitionFromBottom
kCATransitionFromLeft
kCATransitionFromRight
kCATransitionFromTop
/字符串常量形式:
fromLeft
fromRight
fromTop
fromBottom
*/
animation.subtype = @"fromLeft";//字符串常量
//animation.subtype = kCATransitionFromLeft;//全局变量形式
/*
kCAMediaTimingFunctionLinear 线性(匀速)
kCAMediaTimingFunctionEaseIn 先慢
kCAMediaTimingFunctionEaseOut 后慢
kCAMediaTimingFunctionEaseInEaseOut 先慢 后慢 中间快
kCAMediaTimingFunctionDefault 默认
*/
//设置动画的节奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
//设置动画时间
animation.duration = 3;
//把这个转场动画对象添加到一个视图的layer层
//把这个转场动画对象添加到导航控制器的view的layer层
//这个转场动画 执行完之后 会自动的把这个动画删除
// 将动画,添加到视图的layer上。
// 我们是要导航控制器切换视图,所以,添加在导航控制器的view上,如果是模态视图,添加到self.view.layer就可以了!
[self.navigationController.view.layer addAnimation:animation forKey:nil];
[self.navigationController pushViewController:svc animated:YES];
[svc release];
}
- (void)btn:(UIButton *)btn{
CATransition *animation = [CATransition animation];
animation.type = @"suckEffect";
animation.subtype = @"fromLeft";
animation.duration = 3;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
//给view的layer 增加一个转场动画效果
[_view.layer addAnimation:animation forKey:nil];
}