2015-02-04 2 views
1

Я реализую цветную анимацию.iOS CABasicAnimation цветная анимация не влияет

Я хочу изменить цвет черного цвета на цвет градиента.

Я ищу метод, который может использовать 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"]; 
+0

анимацияWithKeyPath: @ "colors" выглядит неправильно. self.view.layer не имеет свойства, называемого цветами. возможно, вы хотели оживить свой градиент от черного до ваших цветов, а не view.layer? –

+0

Можете ли вы дать больше намека или образца? Я хочу, чтобы я изменил свой цвет представления, от черного цвета (цвет init) до градиентного цвета (цвет завершения). спасибо – dickfala

+0

Сделал это вместо этого. Теперь мы анимируем правый слой, слой градиента. –

ответ

2

Вот что вам нужно сделать. Убрал ваш код немного. :)

// 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]; 
+0

Спасибо, @Robert. Вы знаете, как получить colorLayer, когда я нажимаю кнопку? Я удалю прямое имя «colorLayer». Еще раз спасибо. :) Ты мне поможешь. Благодарю. – dickfala

Смежные вопросы