2013-10-24 18 views
5

Als ich zuerst den Sender einrichten kann ich dies tun:Ändern CAEmitterCell Eigenschaften von CAEmitterLayer nach der Emission beginnt

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

aber sagen, dass ich einen Timer erstellen, die später 5 Sekunden ausgelöst, und ich tue dies:

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

} 

der Timer feuert, aber die yAcceleration des CAEmitterCell umziehen nicht. Oder zumindest ändert sich nichts an der Partikelemission auf dem Bildschirm. Wie kann ich eine CAEmitterCell dazu bringen, Änderungen an ihren Eigenschaften zu berücksichtigen?

Antwort

6

Dies ist nicht wirklich klar, aber hier ist die Lösung:

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

Wo "Zelle" ist der Name hier gegeben:

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

Ich bin verwirrt. Wohin geht die Zeile [self.cell setName: @ "cell"] und wo wird oben verwiesen? Willst du sagen, dass es [self.cell setName: @ "NAME"] sein sollte; und dann [self.emitter setValue: ... forKeyPath: @ "emitterCells.NAME.yAcceleration"]; Die Antwort, wie sie geschrieben wurde, verwirrte mich, weil Zelle solch ein generischer Ausdruck ist. Ich frage mich, ob du den Schlüsselpfad modifizierst. – Cindeselia

+0

@Cindeselia der spätere Teil soll nur verdeutlichen, dass der Zellenname in ihrem Fall Zelle war. Wenn Sie Ihren Namen "foo" zugewiesen hätten, wäre der keyPath "emitterCells.foo.yAcceleration". – Warpling

0

Wenn Sie die self.emitter mit einer neuen Zelle init, die Objekt wird beibehalten, also ..wenn Sie die cell.yAcceleration mit einem Timer ändern, kann die Zelle self.emitter nicht geändert werden, wurde bereits geändert.So sollten Sie den Schlüsselpfad von self.emitter verwenden.