iOS CABasicAnimation 彩色动画没有效果
Posted
技术标签:
【中文标题】iOS CABasicAnimation 彩色动画没有效果【英文标题】:iOS the CABasicAnimation color animation not effect 【发布时间】:2015-02-04 09:47:21 【问题描述】:我正在实现彩色动画。
我想把黑色变成渐变色。
我找了一些方法,可以使用CAGradientLayer定义渐变色,CABasicAnimation可以实现变色动画。
但是我在下面的代码中实现,一开始自拍没有变成黑色,颜色也不是动画。
有人知道这些代码发生了什么吗?
非常感谢。
// set black color in the view
CALayer *orginLayer = [CALayer layer];
orginLayer.backgroundColor = [[UIColor blackColor] CGColor];
[self.view.layer addSublayer:orginLayer];
// set gradient layer
CAGradientLayer *colorLayer = [ CAGradientLayer layer];
colorLayer.frame = ( CGRect ) CGPointZero , CGSizeMake ( self.view.frame.size.width , self.view.frame.size.height );
colorLayer.position = self .view.center;
// define colors
UIColor *color1 = [UIColor colorWithRed:(255/255.0) green:(137/255.0) blue:(0/255.0) alpha:1.0];
UIColor *color2 = [UIColor colorWithRed:(247/255.0) green:(241/255.0) blue:(107/255.0) alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)color1.CGColor,color2.CGColor,nil];
colorLayer.colors = colors;
colorLayer.startPoint = CGPointMake ( 1 , 0 );
colorLayer.endPoint = CGPointMake ( .3, 1 );
// set the color animation black color-> gradient color
CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"colors"];
[animation setToValue:colorLayer];
[animation setDuration:10];
[animation setRemovedOnCompletion:YES];
[animation setFillMode:kCAFillModeForwards];
[animation setDelegate:self];
[self.view.layer addAnimation:animation forKey:@"animateGradient"];
【问题讨论】:
animationWithKeyPath:@"colors" 看起来不对。 self.view.layer 没有称为颜色的属性。也许您打算将渐变从黑色变为颜色而不是 view.layer? 您能提供更多提示或示例吗?我的意思是我想改变我的视图颜色,从黑色(初始颜色)到渐变颜色(完成颜色)。谢谢 改为回答。现在我们为正确的图层设置动画,渐变图层。 【参考方案1】:这是您需要做的。也稍微清理了你的代码。 :)
// set gradient layer
CAGradientLayer *colorLayer = [CAGradientLayer layer];
colorLayer.frame = (CGRect) , self.view.frame.size ;
colorLayer.position = self.view.center;
// define colors
UIColor *color1 = [UIColor colorWithRed:255/255. green:137/255. blue:0/255. alpha:1.0];
UIColor *color2 = [UIColor colorWithRed:247/255. green:241/255. blue:107/255. alpha:1.0];
NSArray *colors = @[(id)color1.CGColor, (id)color2.CGColor];
colorLayer.colors = colors;
colorLayer.startPoint = CGPointMake(1, 0);
colorLayer.endPoint = CGPointMake(.3, 1);
// set the color animation black color-> gradient color
CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"colors"];
animation.fromValue = @[(id)[UIColor blackColor].CGColor, (id)[UIColor blackColor].CGColor];
animation.toValue = colors;
animation.duration = 10;
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;
[colorLayer addAnimation:animation forKey:@"animateGradient"];
[self.view.layer addSublayer:colorLayer];
【讨论】:
谢谢你,@罗伯特。当我单击按钮时,您知道如何获取 colorLayer 吗?我将删除直接名称“colorLayer”。再次感谢你。 :) 你在帮助我。谢谢。以上是关于iOS CABasicAnimation 彩色动画没有效果的主要内容,如果未能解决你的问题,请参考以下文章
iOS CoreAnimation 基础动画CABasicAnimation
iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?
iOS 动画CABasicAnimation animationWithKeyPath 一些规定的值
iOS动画效果三:CABAsicAnimation实现平移、旋转和放大