浅谈CATransition动画

直入主题:首先附上实现动画效果的基本属性:
1. type属性
(1) #define定义的常量 (公开API)
kCATransitionFade 交叉淡化过渡
kCATransitionMoveIn 新视图移到旧视图上面
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图

(2)用字符串表示 (私有API)
pageCurl 向上翻一页
pageUnCurl 向下翻一页
rippleEffect 滴水效果
suckEffect 收缩效果,如一块布被抽走
cube 立方体效果
oglFlip 上下翻转效果
cameraIrisHollowOpen 镜头快门开
cameraIrisHollowClose 镜头快门开
2. subType属性
kCATransitionFromRight 从右侧转场
kCATransitionFromLeft 从左侧转场
kCATransitionFromTop 从顶部转场
kCATransitionFromBottom 从底部转场

下面是效果和实现代码
浅谈CATransition动画_第1张图片

浅谈CATransition动画_第2张图片

浅谈CATransition动画_第3张图片

#import "ViewController.h"

@interface ViewController ()
{
    UIView *superView;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    superView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [self.view addSubview:superView];
    //子视图1
    UIView *v1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    v1.backgroundColor = [UIColor orangeColor];
    [superView addSubview:v1];
    //子视图2
    UIView *v2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    v2.backgroundColor = [UIColor blueColor];
    [superView addSubview:v2];
    //变化按钮
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 100)];
    btn.backgroundColor = [UIColor purpleColor];
    [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
    [btn setTitle:@"点击变化" forState:UIControlStateNormal];
    [self.view addSubview:btn];   
}
//点击事件
- (void)btnClick {
    CATransition *transition = [CATransition animation];
    transition.duration = 1;
    transition.type = @"oglFlip";
    transition.subtype = kCATransitionFromLeft;
    [superView.layer addAnimation:transition forKey:nil];
    [superView exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
}

上面的代码实现了在一个视图控制器中点击按钮,利用翻转效果切换了两个view的功能,superView是两个变换view的父视图,那么为什么不直接加在self.view上呢?因为CATransition过渡变化是图层变化,如果将变化效果添加在self.view上的话,那么整个view都会实现这个动画,并不是我想要的。

你可能感兴趣的:(动画,api)