浅谈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 从底部转场
下面是效果和实现代码
上面的代码实现了在一个视图控制器中点击按钮,利用翻转效果切换了两个view的功能,superView是两个变换view的父视图,那么为什么不直接加在self.view上呢?因为CATransition过渡变化是图层变化,如果将变化效果添加在self.view上的话,那么整个view都会实现这个动画,并不是我想要的。
对于UIView动画,需要注意,如果是对UILabel做动画,在下面的方法里面不会展示CGSize的渐变效果,如果换做是UIView,就可以展示,可见,对于UIView的子类,在选择变换效果的时候要注意哪些方法不可用
在iOS实际开发中,很多时候不仅仅只是需要动画效果,也就是说我们需要动画结束后的位置,那么哪些方法可以获得到执行动画后的坐标呢?
UIView动画、仿射变换,是可以得到的,也就是说变换后,控件的位置、形状的确发生了变化,而Layer层的动画仅仅是动画,变换控件的frame是没有变化的。
未完待续、、、、、
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是没有变化的。
未完待续、、、、、
相关文章推荐
- pentaho saiku 安装全过程
- PAT 1031
- 详解Angularjs filter过滤器
- 数据库连接
- 字段构件
- Oracle trunc和round的区别
- java命名规范
- Java简介
- Ubuntu Kylin 15.04 java环境安装配置
- 二维码--用java生成二维码(来自网易云课堂)
- 关于php的魔术常量
- ThinkPHP使用经验积累
- sublime个人快捷键
- [LeetCode]1. Two Sum
- rabbitmq
- 分布式技术一周技术动态 2016.02.07
- java Map实现的cache manager
- android studio 图片资源的放置位置
- 表单美化
- leetcode - Trapping Rain Water