zoukankan      html  css  js  c++  java
  • CABasicAnimation学习Demo 包含了一些经常使用的动画效果

    个人写的一些样例:

    //
    //  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

  • 相关阅读:
    mqtt 服务器与客户端通讯
    MQTT--单片机实现即时通信
    source insight 如何建工程--以及快捷方式查找调用函数方法
    在联网时,两台linux服务器传输文件方法
    字符串截取函数-c语言
    strcpy(),strcat()的用法
    如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)
    如何把apdu[decode_len]打印出来
    SecureCRT中文乱码解决已设置UTF-8
    RobotFrameWork(五)控制流之if语句——Run Keyword If
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3908444.html
Copyright © 2011-2022 走看看