UIKIT.frame 中的动画时针对UIVew 实现的,而 QuartzCode中的动画时针对 layer 实现的
- (IBAction)switchViews:(id)sender
{
/*
//检查yellowViewController.view 的超视图是否为nil 从而检查使用了哪个视图
//如果 yellowViewController.view 存在,但是并没有向用户显示 那么 self.yellowViewController.view.superview == nil 返回YES
//如果 yellowViewController 不存在,或者yellowViewController已经从内存中擦除,self.yellowViewController.view.superview == nil 同样会返回 YES
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
}
*/
/* 增加转换动画
//声明动画块,并指定时间
[UIView beginAnimations:@"view Flip" context:nil];//beginAnimations:context: 第一个参数接收动化块名称 第二个参数是一个(void *) 支持指定你希望将其指针于此动画块关联的对象
[UIView setAnimationDuration:1.25];//设置动画曲线,决定了动画的时间
//设置动画改变其速度,中间速度快,开始和结束速度慢
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
//选择翻转效果 缓存cache选项在动画开始时创建快照,并在动画的每个步骤使用这个图像,而不必重新绘制,除非视图在变换过程中需要改变
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[blueViewController viewWillAppear:YES];//即将显示
[yellowViewController viewWillDisappear:YES];//即将不显示
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
[yellowViewController viewDidAppear:YES];//已经显示
[blueViewController viewDidDisappear:YES];//已经不显示
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
[yellowViewController viewWillAppear:YES];
[blueViewController viewWillDisappear:YES];
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
[blueViewController viewDidAppear:YES];
[yellowViewController viewDidDisappear:YES];
}
//启动动画块
[UIView commitAnimations];
*/
//准备动画
CATransition *animation = [CATransition animation];
//动画持续时间
[animation setDuration:1.25f];
//动画速度
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
//动画效果
//kCATransitionFade淡出
//kCATransitionMoveIn覆盖原图
//kCATransitionPush推出
//kCATransitionReveal底部显出来
[animation setType:kCATransitionFade];
//动画方向
//kCATransitionFromRight/ kCATransitionFromLeft(默认值)
//kCATransitionFromTop/kCATransitionFromBottom
[animation setSubtype:kCATransitionFromBottom];
[self.view.layer addAnimation:animation forKey:@"Reveal"];
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
//动画效果
//suckEffect三角
//rippleEffect水波
//pageCurl上翻页
//pageUnCurl下翻页
//oglFlip上下翻转
[animation setType:@"rippleEffect"];
//动画方向
//kCATransitionFromRight/ kCATransitionFromLeft(默认值)
//kCATransitionFromTop/kCATransitionFromBottom
//[animation setSubtype:kCATransitionFromBottom];
[self.view.layer addAnimation:animation forKey:@"suckEffect"];//开始动画
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
}
}
- (IBAction)switchViews:(id)sender
{
/*
//检查yellowViewController.view 的超视图是否为nil 从而检查使用了哪个视图
//如果 yellowViewController.view 存在,但是并没有向用户显示 那么 self.yellowViewController.view.superview == nil 返回YES
//如果 yellowViewController 不存在,或者yellowViewController已经从内存中擦除,self.yellowViewController.view.superview == nil 同样会返回 YES
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
}
*/
/* 增加转换动画
//声明动画块,并指定时间
[UIView beginAnimations:@"view Flip" context:nil];//beginAnimations:context: 第一个参数接收动化块名称 第二个参数是一个(void *) 支持指定你希望将其指针于此动画块关联的对象
[UIView setAnimationDuration:1.25];//设置动画曲线,决定了动画的时间
//设置动画改变其速度,中间速度快,开始和结束速度慢
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
//选择翻转效果 缓存cache选项在动画开始时创建快照,并在动画的每个步骤使用这个图像,而不必重新绘制,除非视图在变换过程中需要改变
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[blueViewController viewWillAppear:YES];//即将显示
[yellowViewController viewWillDisappear:YES];//即将不显示
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
[yellowViewController viewDidAppear:YES];//已经显示
[blueViewController viewDidDisappear:YES];//已经不显示
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
[yellowViewController viewWillAppear:YES];
[blueViewController viewWillDisappear:YES];
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
[blueViewController viewDidAppear:YES];
[yellowViewController viewDidDisappear:YES];
}
//启动动画块
[UIView commitAnimations];
*/
//准备动画
CATransition *animation = [CATransition animation];
//动画持续时间
[animation setDuration:1.25f];
//动画速度
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
if (self.yellowViewController.view.superview == nil) {
if (self.yellowViewController == nil) {
YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
//动画效果
//kCATransitionFade淡出
//kCATransitionMoveIn覆盖原图
//kCATransitionPush推出
//kCATransitionReveal底部显出来
[animation setType:kCATransitionFade];
//动画方向
//kCATransitionFromRight/ kCATransitionFromLeft(默认值)
//kCATransitionFromTop/kCATransitionFromBottom
[animation setSubtype:kCATransitionFromBottom];
[self.view.layer addAnimation:animation forKey:@"Reveal"];
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
} else {
if (self.blueViewController == nil) {
BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[blueController release];
}
//动画效果
//suckEffect三角
//rippleEffect水波
//pageCurl上翻页
//pageUnCurl下翻页
//oglFlip上下翻转
[animation setType:@"rippleEffect"];
//动画方向
//kCATransitionFromRight/ kCATransitionFromLeft(默认值)
//kCATransitionFromTop/kCATransitionFromBottom
//[animation setSubtype:kCATransitionFromBottom];
[self.view.layer addAnimation:animation forKey:@"suckEffect"];//开始动画
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
}
}