CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。
UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果
CATransition属性解析:
type:动画过渡类型
subtype:动画过渡方向
startProgress:动画起点(在整体动画的百分比)
endProgress:动画终点(在整体动画的百分比)
下面这个demo演示了CATransition的转场动画效果:
源码下载地址:http://download.csdn.net/detail/liu537192/8558681
效果图:
核心代码:
//
// JLViewController.m
// 12-核心动画
//
// Created by XinYou on 15-4-2.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLViewController.h"
@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
- (IBAction)previous;
- (IBAction)next;
/**
* 当前图片索引
*/
@property (nonatomic, assign) int index;
@end
@implementation JLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
/**
* 上一张
*/
- (IBAction)previous {
self.index--;
// 该项目中一共只有9张图片。
if (self.index == -1) {
self.index = 8;
}
NSString *fileName = [NSString stringWithFormat:@"%d.jpg", self.index + 1];
self.iconView.image = [UIImage imageNamed:fileName];
// 创建动画
CATransition *anim = [CATransition animation];
// 设置动画
// type:动画过渡效果
/* 过渡效果u2028
fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade
push //新视图把旧视图推出去 kCATransitionPush
moveIn //新视图移到旧视图上面 kCATransitionMoveIn
reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal
cube //立方体翻滚效果
oglFlip //上下左右翻转效果
suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)*/
anim.type = @"pageUnCurl";
// subtype:动画过渡方向
/* 过渡方向
kCATransitionFromRight
kCATransitionFromLeft
kCATransitionFromBottom
kCATransitionFromTop*/
anim.subtype = kCATransitionFromLeft;
/**
CATransition还有两个比较牛逼的属性:
startProgress:动画起点(在整体动画的百分比)
endProgress:动画终点(在整体动画的百分比)
这两个属性的效果请自行研究。。。
*/
anim.duration = 0.5;
[self.iconView.layer addAnimation:anim forKey:nil];
}
/**
* 下一张
*/
- (IBAction)next {
self.index++;
if (self.index == 9) {
self.index = 0;
}
NSString *fileName = [NSString stringWithFormat:@"%d.jpg", self.index + 1];
self.iconView.image = [UIImage imageNamed:fileName];
CATransition *anim = [CATransition animation];
anim.type = @"pageCurl";
anim.subtype = kCATransitionFromLeft;
anim.duration = 0.5;
[self.iconView.layer addAnimation:anim forKey:nil];
}
@end