1. 程式人生 > >iOS CABasicAnimation CAAnimationGroup 對顏色做連續漸變動畫

iOS CABasicAnimation CAAnimationGroup 對顏色做連續漸變動畫

http://blog.sina.com.cn/s/blog_969096f10101hre7.html

//此動畫效果分三個階段 程實原創

//1、從白色變為灰色 程實原創

//2、灰色變為橘色,再變為灰色,往返作三次 程實原創

//3、會後從灰色變為白色 程實原創

#define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0fblue:(b)/255.0f alpha:1]

//此時做背景色漸變一定用CGColor 

//要使用的三個顏色

CGColorRef originColor = [UIColor whiteColor].CGColor

;

CGColorRef darkGray = RGBCOLOR(207, 205, 205).CGColor;

CGColorRef orange = RGBCOLOR(240, 221, 185).CGColor;

CGFloat duration = 0.75;

//1、從白色變為灰色 程實原創

 CABasicAnimation *anim1 = [CABasicAnimationanimationWithKeyPath:@"backgroundColor"];

    anim1.duration = duration;

    anim1.fromValue = (id)originColor;

    anim1.toValue = (id)darkGray;

//填充效果:動畫結束後,動畫將保持最後的表現狀態

    anim1.fillMode = kCAFillModeForwards;

    anim1.removedOnCompletion = NO;

    anim1.beginTime = 0.0f;

//下面介紹一下fillMode這個列舉

kCAFillModeRemoved 動畫結束後,將會移除掉做的動畫效果

kCAFillModeForwards 動畫結束後,動畫將保持最後的表現狀態

kCAFillModeBackwards 與kCAFillModeForwards相對應

kCAFillModeBoth 是kCAFillModeForwards和kCAFillModeBackwards的結合

kCAFillModeFrozen 4.0之後就不推薦使用了。

 CABasicAnimation *anim = [CABasicAnimationanimationWithKeyPath:@"backgroundColor"];

    anim.duration = duration;

    anim.fromValue = (id)darkGray;

    anim.toValue = (id)orange;

    anim.repeatCount = 3;

    anim.autoreverses = YES;

//此時anim.removedOnCompletion和anim.fillMode設不設定都行。因為會被middleGroup的引數覆蓋

    anim.removedOnCompletion = NO;

    anim.fillMode = kCAFillModeBoth;

    anim.beginTime = 0.0f;

 CAAnimationGroup * middleGroup = [CAAnimationGroup animation];

//一次動畫用時duration,往返乘以2,做三次,用時*3,所以是6倍

    middleGroup.duration = duration*6;

    middleGroup.animations = @[anim];

    middleGroup.removedOnCompletion = NO;

//此autoreverses設為yes則會坐動畫還原

    middleGroup.autoreverses = YES;

    middleGroup.fillMode = kCAFillModeForwards;

//設定此動畫的開始時間

    middleGroup.beginTime = duration;

 //變回原來顏色

 CABasicAnimation *anim3 = [CABasicAnimationanimationWithKeyPath:@"backgroundColor"];

    anim3.duration = duration;

    anim3.fromValue = (id)darkGray;

    anim3.toValue = (id)originColor;

    anim3.removedOnCompletion = NO;

    anim3.beginTime = duration * 7;

    anim3.fillMode = kCAFillModeForwards;

 CAAnimationGroup * theGroup = [CAAnimationGroup animation];

    theGroup.duration = duration*8;

    theGroup.animations = @[anim1,middleGroup,anim3];

    theGroup.removedOnCompletion = NO;

    theGroup.fillMode = kCAFillModeBoth;

   [self.holderView.layer addAnimation:theGroup forKey:@"backgroundColor"];