2013-10-24 4 views
5

Когда я впервые создал эмиттер я могу это сделать:Изменение свойств CAEmitterCell из CAEmitterLayer после излучения начинает

self.cell = [CAEmitterCell emitterCell]; 
self.cell.yAcceleration = 20; 
... 
self.emitter.emitterCells = [NSArray arrayWithObjects:self.cell,nil]; 

Но сказать, что я создать таймер, который стреляет через 5 секунд, и я делаю это:

- (void)timerFired 
{ 
    self.cell.yAcceleration = -10; 

} 

Таймер срабатывает, но yAcceleration CAEmitterCell не изменяется. Или, по крайней мере, ничего не меняется в выбросе частиц на экране. Как я могу заставить CAEmitterCell уважать изменения, которые я вношу в его свойства?

ответ

6

Это не реально очевидна, но вот решение:

[self.emitter setValue:[NSNumber numberWithFloat:-10.0] 
       forKeyPath:@"emitterCells.cell.yAcceleration"]; 

Где «клетка» это имя, данное здесь:

[self.cell setName:@"cell"]; 
+0

Я смущен. Где находится строка [self.cell setName: @ "cell"] и где она ссылается выше? Вы хотите сказать, что это должно быть [self.cell setName: @ "NAME"]; и затем [self.emitter setValue: ... forKeyPath: @ "emitterCells.NAME.yAcceleration"]; Ответ, как написано, сбивает меня с толку, потому что ячейка - это такой общий термин, я задаюсь вопросом, изменяете ли вы путь ключа? – Cindeselia

+0

@Cindeselia, более поздняя часть - это просто пояснить, что имя ячейки в их случае было ячейкой. Если вы присвоили свое имя «foo», тогда keyPath будет «emitterCells.foo.yAcceleration». – Warpling

0

Когда вы инициализировать self.emitter с новой ячейкой, объект будет сохранен, поэтому .. когда вы меняете cell.yAcceleration с таймером, ячейку self.emitter изменить нельзя, self.cell.yAcceleration уже изменен. Поэтому вы должны использовать путь ключа self.emitter.

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

  • Нет связанных вопросов^_^