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

来源:互联网 发布:软件标题修改器 编辑:程序博客网 时间:2024/06/14 01:35

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

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

- (  void )viewDidLoad 

{

    [ super viewDidLoad  ];

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

    self . view  . backgroundColor  = [ UIColorlightGrayColor  ];

    myTest1 = [[ UILabelalloc  ] initWithFrame  : CGRectMake  ( 10 , 100 , 60 , 40 )];

    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  . layer addAnimation :[ self rotation  : 2 degree  : kRadianToDegrees ( 90 ) direction  : 1 repeatCount  : MAXFLOAT ] forKey : 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; 

}

0 0