您的位置:首页 > 其它

浅谈CATransition动画

2016-02-06 10:19 316 查看
直入主题:首先附上实现动画效果的基本属性:

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 从底部转场

下面是效果和实现代码







#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都会实现这个动画,并不是我想要的。

对于UIView动画,需要注意,如果是对UILabel做动画,在下面的方法里面不会展示CGSize的渐变效果,如果换做是UIView,就可以展示,可见,对于UIView的子类,在选择变换效果的时候要注意哪些方法不可用

[UIView animateWithDuration:5 animations:^{
}];


在iOS实际开发中,很多时候不仅仅只是需要动画效果,也就是说我们需要动画结束后的位置,那么哪些方法可以获得到执行动画后的坐标呢?

UIView动画、仿射变换,是可以得到的,也就是说变换后,控件的位置、形状的确发生了变化,而Layer层的动画仅仅是动画,变换控件的frame是没有变化的。

未完待续、、、、、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: