iOS核心动画(三个动画类的使用)
2016-07-07 00:00
344 查看
摘要: iOS核心动画(三个动画类的使用)
1.Core Animation可以在Mac OSX和iOS中使用
2.Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程
3.Core Animation是直接作用在CALayer上的,并非UIView
4.
#####1.CABasicAnimation
设置动画属性(position),告诉动画执行怎样的动画
设置动画属性值改变 toValue 从当前默认的开始,告诉动画属性怎么改变
duration:动画时长
动画有反弹?取消反弹
1> 执行动画完毕不要移除
2> 设置动画填充模式,保持最新的位置。
CABasicAnimation只能在两个值之间做动画,用CAKeyframeAnimation,实现多个值做动画
#####补充:
fillMode属性值(要想fillMode有效,最好设置removedOnCompletion = NO)
kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
#####2.CAKeyframeAnimation
values:为NSArray对象。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略
#####3.CATransition
#####3.1
#####3.2代码
#####4.CAAnimationGroup
#####4.1注意
动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
#####5.详细的源码地址(以下是github地址)
CABasicAnimation
CAKeyframeAnimation
CATransition
CAAnimationGroup
核心动画(三个动画类的使用)
#####摘要:执行动画的本质是改变图层的属性1.Core Animation可以在Mac OSX和iOS中使用
2.Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程
3.Core Animation是直接作用在CALayer上的,并非UIView
4.
#####1.CABasicAnimation
设置动画属性(position),告诉动画执行怎样的动画
设置动画属性值改变 toValue 从当前默认的开始,告诉动画属性怎么改变
duration:动画时长
动画有反弹?取消反弹
1> 执行动画完毕不要移除
2> 设置动画填充模式,保持最新的位置。
CABasicAnimation只能在两个值之间做动画,用CAKeyframeAnimation,实现多个值做动画
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //开启动画 CABasicAnimation *basic=[CABasicAnimation animation]; //描述哪个属性产生动画 basic.keyPath=@"position"; //设置值 basic.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 450)]; //设置动画完成时候不再移除动画 basic.removedOnCompletion=NO; //设置动画执行完成要保持最新的效果 basic.fillMode=kCAFillModeForwards; //添加动画 [self.greenView.layer addAnimation:basic forKey:nil]; }
#####补充:
fillMode属性值(要想fillMode有效,最好设置removedOnCompletion = NO)
kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
#####2.CAKeyframeAnimation
values:为NSArray对象。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略
- (void)drawRect:(CGRect)rect { [self.path stroke]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ UITouch *touch=[touches anyObject]; CGPoint p=[touch locationInView:self]; self.path=[UIBezierPath bezierPath]; [self.path moveToPoint:p]; } -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ UITouch *touch=[touches anyObject]; CGPoint p=[touch locationInView:self]; [self.path addLineToPoint:p]; [self setNeedsDisplay]; } -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //开启动画 // CAKeyframeAnimation *keyFrame=[[CAKeyframeAnimation alloc]init]; CAKeyframeAnimation *keyFrame=[CAKeyframeAnimation animation]; keyFrame.keyPath=@"position"; keyFrame.path=self.path.CGPath; keyFrame.duration=1; keyFrame.repeatCount=MAXFLOAT; //添加动画 [self.subviews.firstObject.layer addAnimation:keyFrame forKey:nil]; }
#####3.CATransition
#####3.1
#####3.2代码
static int i=2; -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ if (i>3) { i=2; } NSString *imageName=[NSString stringWithFormat:@"%d",i]; self.imageView.image=[UIImage imageNamed:imageName]; CATransition *transaction=[CATransition animation]; transaction.type=@"pageCurl"; [self.imageView.layer addAnimation:transaction forKey:nil]; i++; }
#####4.CAAnimationGroup
#####4.1注意
动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ CAAnimationGroup *animGroups=[CAAnimationGroup animation]; CABasicAnimation *basic=[CABasicAnimation animation]; CABasicAnimation *basic2=[CABasicAnimation animation]; //removedOnCompletion无效果 basic.keyPath=@"position"; basic.toValue=[NSValue valueWithCGPoint:CGPointMake(150, 400)]; // basic.removedOnCompletion=NO; // basic.fillMode=kCAFillModeForwards; // basic2.keyPath=@"transform.scale"; basic2.toValue=@0.5; // basic2.removedOnCompletion=NO; // basic2.fillMode=kCAFillModeForwards; animGroups.animations=@[basic,basic2]; animGroups.removedOnCompletion=NO; animGroups.fillMode=kCAFillModeForwards; [self.redView.layer addAnimation:animGroups forKey:nil]; }
#####5.详细的源码地址(以下是github地址)
CABasicAnimation
CAKeyframeAnimation
CATransition
CAAnimationGroup
相关文章推荐
- 李洪强iOS开发之断点续传1
- iOS-解决自定义cell.selectedBackgroundView 遮挡分割线问题
- iOS多线程GCD
- iOS中常用的几何方法
- IOS开发笔记——实现tableView的headerView跟随cell滑动
- iOS 自定义流布局 进阶篇
- 李洪强iOS开发之OC[011] - 有参方法的声明实现以及调用练习
- iOS 消除警告
- ios 宏定义 系统版本 判定
- iOS学习——KVO底层实现机制探究
- Mac 搭建 Jenkins
- iOS可变参数函数的编写
- #iOS开发中的两种消息通知机制详解
- iOS7,iOS8和iOS9的区别
- 李洪强iOS开发之OC点语法和变量作用域
- 李洪强iOS开发之OC面向对象—多态
- 李洪强iOS开发之多线程编程2-NSOperation
- 国内90%以上的 iOS 开发者,对 APNs 的认识都是错的
- iOS PureLayout的基本使用(二)
- 关于在苹果申请邓白氏码的问题