zoukankan      html  css  js  c++  java
  • IOS 简单的动画自定义方法(旋转、移动、闪烁等)

    IOS 简单的动画自定义方法(旋转、移动、闪烁等)  

    #define kDegreesToRadian(x) (M_PI * (x) / 180.0)

     

    #define kRadianToDegrees(radian) (radian*180.0)/(M_PI)

     

    - (void)viewDidLoad

    {

        [superviewDidLoad];

        self.title = @"测试动画";

        self.view.backgroundColor = [UIColorlightGrayColor];

        

        

        myTest1 = [[UILabelalloc]initWithFrame:CGRectMake(101006040)];

        myTest1.backgroundColor = [UIColorblueColor];

        myTest1.textAlignment = NSTextAlignmentCenter;

        myTest1.text = @"张明炜";

        myTest1.textColor = [UIColorwhiteColor];

        [self.viewaddSubview:myTest1];

        

          //闪烁效果。

    //    [myTest1.layer addAnimation:[self opacityForever_Animation:0.5] forKey:nil];

          ///移动的动画。

    //    [myTest1.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]] forKey:nil];

        //缩放效果。

    //    [myTest1.layer addAnimation:[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT] forKey:nil];

         //组合动画。

    //    NSArray *myArray = [NSArray arrayWithObjects:[self opacityForever_Animation:0.5],[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]],[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT], nil];

    //    [myTest1.layer addAnimation:[self groupAnimation:myArray durTimes:3.0f Rep:MAXFLOAT] forKey:nil];

        //路径动画。

    //    CGMutablePathRef myPah = CGPathCreateMutable();

    //    CGPathMoveToPoint(myPah, nil,30, 77);

    //    CGPathAddCurveToPoint(myPah, nil, 50, 50, 60, 200, 200, 200);//这里的是控制点。

    //    [myTest1.layer addAnimation:[self keyframeAnimation:myPah durTimes:5 Rep:MAXFLOAT] forKey:nil];

        //旋转动画。

        [myTest1.layeraddAnimation:[selfrotation:2degree:kRadianToDegrees(90) direction:1repeatCount:MAXFLOATforKey:nil];

        

        

    }

     

    #pragma mark === 永久闪烁的动画 ======

    -(CABasicACnimation *)opacityForever_Animation:(float)time

    {

        CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"opacity"];//必须写opacity才行。

        animation.fromValue = [NSNumbernumberWithFloat:1.0f];

        animation.toValue = [NSNumbernumberWithFloat:0.0f];//这是透明度。

        animation.autoreverses = YES;

        animation.duration = time;

        animation.repeatCount = MAXFLOAT;

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

         animation.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];///没有的话是均匀的动画。

        return animation;

    }

     

    #pragma mark =====横向、纵向移动===========

    -(CABasicAnimation *)moveX:(float)time X:(NSNumber *)x

    {

        CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"transform.translation.x"];///.y的话就向下移动。

        animation.toValue = x;

        animation.duration = time;

        animation.removedOnCompletion = NO;//yes的话,又返回原位置了。

        animation.repeatCount = MAXFLOAT;

        animation.fillMode = kCAFillModeForwards;

        return animation;

    }

     

    #pragma mark =====缩放-=============

    -(CABasicAnimation *)scale:(NSNumber *)Multiple orgin:(NSNumber *)orginMultiple durTimes:(float)time Rep:(float)repertTimes

    {

        CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"transform.scale"];

        animation.fromValue = Multiple;

        animation.toValue = orginMultiple;

        animation.autoreverses = YES;

        animation.repeatCount = repertTimes;

        animation.duration = time;//不设置时候的话,有一个默认的缩放时间.

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

        return  animation;

    }

     

    #pragma mark =====组合动画-=============

    -(CAAnimationGroup *)groupAnimation:(NSArray *)animationAry durTimes:(float)time Rep:(float)repeatTimes

    {

        CAAnimationGroup *animation = [CAAnimationGroupanimation];

        animation.animations = animationAry;

        animation.duration = time;

        animation.removedOnCompletion = NO;

        animation.repeatCount = repeatTimes;

        animation.fillMode = kCAFillModeForwards;

        return animation;

    }

     

    #pragma mark =====路径动画-=============

    -(CAKeyframeAnimation *)keyframeAnimation:(CGMutablePathRef)path durTimes:(float)time Rep:(float)repeatTimes

    {

        CAKeyframeAnimation *animation = [CAKeyframeAnimationanimationWithKeyPath:@"position"];

        animation.path = path;

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

        animation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];

        animation.autoreverses = NO;

        animation.duration = time;

        animation.repeatCount = repeatTimes;

        return animation;

    }

     

    #pragma mark ====旋转动画======

    -(CABasicAnimation *)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount

    {

        CATransform3D rotationTransform = CATransform3DMakeRotation(degree, 0, 0, direction);

        CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"transform"];

        animation.toValue = [NSValue valueWithCATransform3D:rotationTransform];

        animation.duration  =  dur;

        animation.autoreverses = NO;

        animation.cumulative = NO;

        animation.fillMode = kCAFillModeForwards;

        animation.repeatCount = repeatCount;

        animation.delegate = self;

     

        return animation;

    }

  • 相关阅读:
    shell脚本基础
    rtsp冷门解释
    C++基础之动态内存
    树莓派3安装ros
    Trie树
    [LeetCode]The Skyline Problem
    [LeetCode]Implement Trie (Prefix Tree)
    C++基础之适配器
    配置树莓派3的openwrt中的网络
    [LeetCode]Self Crossing
  • 原文地址:https://www.cnblogs.com/YangFuShun/p/6544455.html
Copyright © 2011-2022 走看看