CABasicAnimation学习Demo 包含了一些经常使用的动画效果
2014-08-12 20:48
399 查看
个人写的一些样例:
最后附上Demo下载地址:http://download.csdn.net/detail/u012951123/7500419
// // ViewController.m // CABasicAnimationDemo // // Created by haotian on 14-6-13. // Copyright (c) 2014年 Baseus. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController @synthesize ViewTest; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //self.ViewTest.backgroundColor = [UIColor redColor]; //组合动画调用 //[self startAnimation2]; //永久闪烁动画 //[self opacityForever_Animation:0.3]; ////有闪烁次数的动画 //[self opacityTimes_Animation:10 durTimes:0.3]; //画一条线 路径 [self drawACurvedLine]; //路径动画 //[self animateCicleAlongPath]; } -(void)startAnimation { CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 50)]; animation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)]; animation.duration = 3.0f; animation.repeatCount = 1; //animation.removedOnCompletion = NO; //完毕后是否回到原来状态,假设为NO 就是停留在动画结束时的状态 //animation.fillMode = kCAFillModeRemoved;//动画完毕后返回到原来状态 //animation.fillMode = kCAFillModeBackwards; animation.fillMode = kCAFillModeForwards;//当动画完毕时,保留在动画结束的状态 [self.ViewTest.layer addAnimation:animation forKey:nil]; } -(void)startAnimation1 { CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; animation.fromValue = [NSNumber numberWithFloat:0.0f]; animation.toValue = [NSNumber numberWithFloat:10.0f]; //animation.duration = 0.5f; //animation.fillMode = kCAFillModeForwards; //animation.removedOnCompletion = NO; //animation.repeatCount = 2; //[self.ViewTest.layer addAnimation:animation forKey:nil]; CABasicAnimation *animation1 = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; animation.fromValue = [NSNumber numberWithFloat:0.0f]; animation.toValue = [NSNumber numberWithFloat:10.0f]; //animation.duration = 0.5f; //animation.fillMode = kCAFillModeForwards; //animation.removedOnCompletion = NO; //animation.repeatCount = 2; //[self.ViewTest.layer addAnimation:animation1 forKey:nil]; CAAnimationGroup *groupAnimation = [CAAnimationGroup animation]; groupAnimation.duration = 2.0f; groupAnimation.autoreverses = YES; groupAnimation.repeatCount = 5; [groupAnimation setAnimations:[NSArray arrayWithObjects:animation,animation1, nil]]; [self.ViewTest.layer addAnimation:groupAnimation forKey:nil]; } //组合动画 -(void)startAnimation2 { //界限 CABasicAnimation *boundsAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"]; boundsAnimation.fromValue = [NSValue valueWithCGRect: self.ViewTest.bounds]; boundsAnimation.toValue = [NSValue valueWithCGRect:CGRectZero]; //透明度变化 CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; opacityAnimation.fromValue = [NSNumber numberWithFloat:1.0]; opacityAnimation.toValue = [NSNumber numberWithFloat:0.5]; //位置移动 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; animation.fromValue = [NSValue valueWithCGPoint: self.ViewTest.layer.position]; CGPoint toPoint = self.ViewTest.layer.position; toPoint.x += 180; animation.toValue = [NSValue valueWithCGPoint:toPoint]; //旋转动画 CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];//"z"还能够是“x”“y”,表示沿z轴旋转 rotationAnimation.toValue = [NSNumber numberWithFloat:(2 * M_PI) * 3]; // 3 is the number of 360 degree rotations // Make the rotation animation duration slightly less than the other animations to give it the feel // that it pauses at its largest scale value rotationAnimation.duration = 3.0f; rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; //缓入缓出 //rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; //缩放动画 CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; scaleAnimation.fromValue = [NSNumber numberWithFloat:0.0]; scaleAnimation.toValue = [NSNumber numberWithFloat:1.0]; scaleAnimation.duration = 3.0f; scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; //组合动画 CAAnimationGroup *animationGroup = [CAAnimationGroup animation]; animationGroup.duration = 3.0f; animationGroup.autoreverses = YES; //是否重播,原动画的倒播 animationGroup.repeatCount = NSNotFound;//HUGE_VALF; //HUGE_VALF,源自math.h [animationGroup setAnimations:[NSArray arrayWithObjects:rotationAnimation, scaleAnimation,boundsAnimation, nil]]; //将上述两个动画编组 [self.ViewTest.layer addAnimation:animationGroup forKey:@"animationGroup"]; } //永久闪烁的动画 -(void)opacityForever_Animation:(float)time { CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"]; animation.fromValue=[NSNumber numberWithFloat:1.0]; animation.toValue=[NSNumber numberWithFloat:0.0]; animation.autoreverses=YES; animation.duration=time; animation.repeatCount=FLT_MAX; animation.removedOnCompletion=NO; animation.fillMode=kCAFillModeForwards; [self.ViewTest.layer addAnimation:animation forKey:@"opacityForever"]; } /**************************************************************************/ //有闪烁次数的动画 -(void)opacityTimes_Animation:(float)repeatTimes durTimes:(float)time; { CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"]; animation.fromValue=[NSNumber numberWithFloat:1.0]; animation.toValue=[NSNumber numberWithFloat:0.4]; animation.repeatCount=repeatTimes; animation.duration=time; animation.removedOnCompletion=NO; animation.fillMode=kCAFillModeForwards; animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; animation.autoreverses=YES; [self.ViewTest.layer addAnimation:animation forKey:@"opacityTimes"]; } /**************************************************************************/ //路径动画 -(void)keyframeAniamtion:(CGMutablePathRef)path durTimes:(float)time Rep:(float)repeatTimes { } //在视图中画一条线 -(void)drawACurvedLine { UIGraphicsBeginImageContext(CGSizeMake(320, 460)); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, 3); CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); //设置起点 CGContextMoveToPoint(context, 10, 10); CGContextAddQuadCurveToPoint(context, 10, 450, 310, 450); //CGContextAddQuadCurveToPoint(context, 310, 10, 10, 10); //划线 CGContextDrawPath(context, kCGPathStroke); //得到一个image 从眼下的矢量上下文 UIImage *curve = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageView *curveView = [[UIImageView alloc]initWithImage:curve]; curveView.frame = CGRectMake(1, 1, 320, 460); [curveView setBackgroundColor:[UIColor clearColor]]; [self.view addSubview:curveView]; } -(void)animateCicleAlongPath { //准备关键帧动画 CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; pathAnimation.calculationMode = kCAAnimationPaced; pathAnimation.fillMode = kCAFillModeForwards; pathAnimation.removedOnCompletion = NO; pathAnimation.duration = 5.0f; pathAnimation.repeatCount = 200; //pathAnimation.autoreverses = YES; //原路返回,而不是从头再来 //设置动画路径 //CGPoint endPoint = CGPointMake(310, 450); CGMutablePathRef curvedPath = CGPathCreateMutable(); CGPathMoveToPoint(curvedPath, NULL, 10, 10); CGPathAddQuadCurveToPoint(curvedPath, NULL, 10, 450, 310, 450); CGPathAddQuadCurveToPoint(curvedPath, NULL, 310, 10, 10, 10); //已经有了路径,我们要告诉动画 路径 pathAnimation.path = curvedPath; CGPathRelease(curvedPath); //这里要手工释放 [self.ViewTest.layer addAnimation:pathAnimation forKey:nil]; } /**************************************************************************/ - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
最后附上Demo下载地址:http://download.csdn.net/detail/u012951123/7500419
相关文章推荐
- iOS 各种学习资源demo链接汇总 (包含刷新,动画,图表,对话框等效果)
- CABasicAnimation学习Demo 包括了一些常用的动画效果
- CABasicAnimation学习Demo 包括了一些常用的动画效果
- iOS 各种学习资源demo链接汇总 (包含刷新,动画,图表,对话框等效果)
- View动画另一些使用场景--LayoutAnimation和Activity之间的切换效果
- Android学习-使用ViewFlipper实现屏幕切换的动画效果
- 水晶报表的一些学习笔记(使用特殊字体实现特殊报表效果【转载】)
- C#学习笔记之——一些练习(包含了一些out的使用,string的使用,StringBuilder的使用,类的属性,最大公约数的求法,还有英雄,武器类的设置)
- 《Cocos2d学习之路》三,学习使用TexturePacker创建动画效果
- 安卓手机卫士学习笔记系列——两个Activity之间切换动画效果overridependingtransition的使用
- Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)
- Android中的动画效果学习之二---Tween动画(使用XML文件进行配置动画效果)
- Html学习,使用AmazeUI实现的一些效果
- slidingmenu+fragment实现经常使用的側滑效果(包含Fragment状态的保存)
- 【源代码】手把手教你Autolayout如何使用动画(附类似Passbook效果Demo+详细分析实现原理)
- Unity3D学习(9)之动画效果与itween插件使用
- Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)
- 一些动画效果用使用 updateAfterEvent
- Android中的动画效果学习之二---Tween动画(使用XML文件进行配置动画效果)