CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。
动画转场类型
类型字符串 | 效果说明 | 关键字 | 方向 |
---|---|---|---|
fade | 交叉淡化过渡 | YES | |
push | 新视图把旧视图推出去 | YES | |
moveIn | 新视图移到旧视图上面 | YES | |
reveal | 将旧视图移开,显示下面的新视图 | YES | |
cube | 立方体翻滚效果 | ||
oglFlip | 上下左右翻转效果 | ||
suckEffect | 收缩效果,如一块布被抽走 | NO | |
rippleEffect | 水滴效果 | NO | |
pageCurl | 向上翻页效果 | ||
pageUnCurl | 向下翻页效果 | ||
cameraIrisHollowOpen | 相机镜头打开效果 | NO | |
cameraIrisHollowClose | 相机镜头关闭效果 | NO |
使用UIView动画函数实现转场动画
单视图
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
参数说明:
- duration:动画的持续时间
- view:需要进行转场动画的视图
- options:转场动画的类型
- animations:将改变视图属性的代码放在这个block中
- completion:动画结束后,会自动调用这个block
双视图
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;
- 参数说明:
- duration:动画的持续时间
- options:转场动画的类型
- animations:将改变视图属性的代码放在这个block中
- completion:动画结束后,会自动调用这个block
代码演示
点击屏幕切换图片
- 在控制器中添加一个UIImageView
- 核心代码 ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
static int i = 2;
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
if (i == 4) {
i = 1;
}
//更改图片name,用于不断切换图片,需要提前把图片命名为“1”、“2”、“3”
NSString * strImage = [NSString stringWithFormat:@"%d",i];
_imageView.image = [UIImage imageNamed:strImage];
i++;
//转场动画
//初始化
CATransition * anim = [CATransition animation];
//设置动画转场类型,可以是`fade', `moveIn', `push' and `reveal'等等
anim.type = @"cameraIrisHollowOpen";
//动画执行周期
anim.duration = 1;
[_imageView.layer addAnimation:anim forKey:nil];
/*-----------我是分界线-----------------*/
//还可以使用UIView的动画函数实现转场动画
//单视图API
// [UIView transitionWithView:_imageView duration:1 options:UIViewAnimationOptionTransitionCurlDown animations:^{
//
// NSLog(@"动画开始执行前走这里");
//
//
// } completion:^(BOOL finished) {
//
// //动画执行完毕后的首位操作
// NSLog(@"动画执行完毕走这里");
//
// }];
//双视图API
// 这是一个便捷的视图过渡 API,在动画过程中,首先将 fromView 从父视图中删除,然后将 toView 添加,就是做了一个替换操作。
//+ (void)transitionFromView:(UIView *)fromView
//toView:(UIView *)toView
//duration:(NSTimeInterval)duration
//options:(UIViewAnimationOptions)options
//completion:(void (^ __nullable)(BOOL finished))completion;
}
@end