Анимация свойства цвета CAEmitterCell
У меня есть CAEmitterCell
и я настроил его конкретным цветом. В документации говорится, что это свойство является анимируемым, и я хотел бы анимировать его между несколькими разными цветами для разных игроков в моей игре (все из которых выбирают свой цвет в начале).
Вот мой EmitterCell
когда я настроил это:
//
// Emitter Cells
//
// 'New Emitter' cell configuration
newEmitter = [CAEmitterCell emitterCell];
newEmitter.scaleSpeed = 10;
newEmitter.lifetime = 2.481715;
newEmitter.velocity = 332.3636968085106;
newEmitter.contents = newemitterImg;
newEmitter.name = @"New Emitter";
newEmitter.color = [[UIColor colorWithRed:0.50 green:0.00 blue:1.00 alpha:1.00] CGColor];
newEmitter.scaleRange = 4.178236607142859;
newEmitter.lifetimeRange = 1.6;
newEmitter.greenRange = -2.775558e-17;
newEmitter.birthRate = 40;
newEmitter.emissionRange = -6.283185306666667;
newEmitter.scale = 0;
//
// Emitter Cell Chains
//
emitter.emitterCells = [NSArray arrayWithObjects:newEmitter, nil];
И здесь я проверяю изменение цвета в этом случае, просто подпрыгивая между двумя разными цветами:
-(void)changeColor {
if (color == 0) {
color = 1;
NSLog(@"color = 1");
[UIView animateWithDuration:1.5 delay:0 options:0 animations:^{
newEmitter.color = [[UIColor colorWithRed:0.50 green:0.00 blue:1.00 alpha:1.00] CGColor];
} completion:^(BOOL finished) {[self performSelector:@selector(changeColor) withObject:nil afterDelay:2];}];
} else {
color = 0;
NSLog(@"color = 0");
[UIView animateWithDuration:1.5 delay:0 options:0 animations:^{
newEmitter.color = [[UIColor colorWithRed:1.00 green:0.50 blue:0.10 alpha:1.00] CGColor];
} completion:^(BOOL finished) {[self performSelector:@selector(changeColor) withObject:nil afterDelay:2];}];
}
}
Однако, когда я запускаю это, цвет никогда не меняется. Должен ли я неправильно понять природу "анимируемого" здесь, или мне просто нужно сделать это по-другому для CAEmitterCell
?
3 ответа
CAEmitterCells, на самом деле, разные. Чтобы анимации работали над ними, вам нужно выполнить следующие шаги:
1. Присвойте имя вашей CAEmitterCell, например:
newEmitter.name = @"fire";
2. Получите доступ к свойству анимации для этого эмиттера через экземпляр CAEmitterLayer:
//Set first before doing CABasicAnimation so it sticks
newEmitter.redSpeed = 1.0;
//Access the property with this key path format: @"emitterCells.<name>.<property>"
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"emitterCells.fire.redSpeed"];
anim.fromValue = @(0.0);
anim.toValue = @(1.0);
anim.duration = 1.5;
anim.fillMode = kCAFillModeForwards;
[emitter addAnimation:anim forKey:@"emitterAnim"];
Попробуй это:
[newEmitter.emitterCells[0] setColor:[[UIColor yellowColor] CGColor]];
Вы можете использовать эти свойства для анимации цвета излучателя.
newEmitter.redSpeed = 1.0;
newEmitter.greenSpeed = 1.0;
newEmitter.blueSpeed = 1.0;