在平时的开发过程当中,咱们为了让应用更绚丽,常常会加入一些动画效果。实现iOS漂亮的动画效果主要有两种方法,一种是UIView层面的,一种是使用CATransition,UIview只能用于一些简单的,经常使用的效果展示;CATransition则能够进行更低层次的控制动画
1.UIView
url
UIView的简单动画就能够知足咱们的应用开发,UIView支持的动画属性包括:frame,center,bounds,transfrom,alpha,backgroundcolor等spa
2.CATransition
orm
若是是将控制器内的子视图转场到另外一个子视图,就将动画加入到视图控制器的图层
对象
要令一个转场生效,要将动画添加到将要变为动画视图所附着的图层。例如在两个视图控制器之间进行转场,那就将动画添加到窗口的图层中。
事务
动画类型ip
1.全局变量形式
ci
kCATransitionFade 交叉淡化过分
开发
kCATransitionMoveIn 新视图移动到旧视图上
字符串
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图
2.字符串表示
fade 交叉淡化过渡
moveIn 新视图移动到旧视图上
push 新视图把旧视图推出去
reveal 将旧视图移开,显示下面的新视图
pageCurl 向上翻一页
pageUnCurl 向下翻一页
rippleEffect 滴水效果
suckEffect 收缩效果,如一块布被抽走
cube 立方体效果
oglFlip 上下翻转效果
动画的速度/节奏
kCAMediaTimingFunctionLinear 线性(匀速)
kCAMediaTimingFunctionEaseIn 先慢
kCAMediaTimingFunctionEaseOut后慢
kCAMediaTimingFunctionEaseInEaseOut先慢 后慢 中间快
kCAMediaTimingFunctionDefault默认
动画对象
隐式动画&显示动画
//生成一个layer
self.layer = [CALayer layer];
self.layer.backgroundColor = [UIColor blueColor].CGColor;
//设置layer的中心点坐标
self.layer.position = CGPointMake(100, 100);
self.layer.bounds = CGRectMake(0, 0, 100, 100);
//设置圆角
self.layer.cornerRadius = 50;
//把layer添加到view的layer上
[self.view.layer addSublayer:self.layer];
//CATransaction 事务
[CATransaction begin];
//修改隐式动画的默认时间
[CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
//经过修改属性而产生的动画,叫作隐式动画
self.layer.position = CGPointMake(300, 200);
//
[CATransaction commit];
显示动画
//CATransaction 事务
[CATransaction begin];
//关闭隐士动画效果
[CATransaction setDisableActions:YES];
//实例化一个CABasicAnimation,
CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
//fromValue 从那个地方开始
basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
//toValue 结束的位置
basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 200)];
//duration 指定持续时间
basicAnimation.duration = 2;
//经过addAnimation显示添加的指定的动画,显式动画
[self.layer addAnimation:basicAnimation forKey:@"base"];
self.layer.position = CGPointMake(300, 200);
//
[CATransaction commit];
基本动画
//@"opacity" 修改透明度
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
//透明度变换到0
animation.toValue = [NSNumber numberWithFloat:0.0f];
animation.duration = 2;
animation.repeatCount = 1;
[_myView.layer addAnimation:animation forKey:nil];
动画组
//旋转的动画
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//变换到那个值
rotationAnimation.toValue = [NSNumber numberWithFloat:(4 * M_PI)];
//周期
rotationAnimation.duration = 0.35f;
//节奏
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//比例动画
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//比例变换哪一个值
scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];//比例变换到0缩小到0
scaleAnimation.duration = 0.35f;
scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//动画组
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
//设置动画时间
animationGroup.duration = 0.35f;
//动画结束后,自动从新开始
animationGroup.autoreverses = YES;
//重复次数
animationGroup.repeatCount = 2;
//把两个动画同时加到动画组中
animationGroup.animations =[NSArray arrayWithObjects:rotationAnimation, scaleAnimation, nil];
//增长动画 给 _myView动画组
//若是要同时增长两个动画 先放到动画组中
[_myView.layer addAnimation:animationGroup forKey:@"animationGroup"];