2013-10-24 8 views
5

Quando ho impostato un trasmettitore posso fare questo:Modifica delle proprietà CAEmitterCell di CAEmitterLayer dopo l'emissione inizia

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

Ma dire Creo un timer che spara 5 secondi dopo, e faccio questo:

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

} 

Il timer scatta, ma la yAccelerazione di CAEmitterCell non viene modificata. O almeno nulla cambia nell'emissione di particelle sullo schermo. Come posso ottenere un CAEmitterCell per rispettare le modifiche apportate alle sue proprietà?

risposta

6

Questo non è reale ovvio, ma ecco la soluzione:

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

Dove "cella" è il nome dato qui:

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

Sono confuso. Dove va la riga [self.cell setName: @ "cell"] e dove si fa riferimento in precedenza? Intendi dire che dovrebbe essere [self.cell setName: @ "NAME"]; e quindi [self.emitter setValue: ... forKeyPath: @ "emitterCells.NAME.yAcceleration"]; La risposta come è scritta mi confonde perché la cella è un termine così generico che mi chiedo se stai modificando il percorso chiave? – Cindeselia

+0

@Cindeselia la parte successiva è solo per chiarire che il nome della cella nel loro caso era cellulare. Se tu avessi assegnato il tuo nome "pippo", il keyPath sarebbe "emitterCells.foo.yAcceleration". – Warpling

0

Quando init self.emitter con un nuovo cellulare, il l'oggetto verrà mantenuto, quindi ..quando si modifica cell.yAcceleration con un timer, la cella di self.emitter non può essere modificata, self.cell.yAcceleration è già stato modificato. Quindi, è necessario utilizzare il percorso chiave di self.emitter.

Problemi correlati