2013-10-24 11 views
5

Kiedy po raz pierwszy skonfigurować nadajnik mogę to zrobić:Zmiana właściwości CAEmitterCell z CAEmitterLayer po emisji rozpoczyna

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

Ale powiedzenia tworzę timer, który odpala 5 sekund później, a ja to zrobić:

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

} 

Licznik czasu uruchamia się, ale wartość atrybutu CAEmitterCell nie ulega zmianie. Lub przynajmniej nic nie zmienia w emisji cząstek na ekranie. Jak mogę przekonać CAEmitterCell do respektowania zmian, które wprowadzam w jego właściwościach?

Odpowiedz

6

To nie jest prawdziwe oczywiste, ale tu jest rozwiązanie:

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

Gdzie „komórka” to nazwa nadana tutaj:

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

Jestem zdezorientowany. Gdzie znajduje się linia [self.cell setName: @ "cell"] i gdzie jest mowa powyżej? Czy chcesz powiedzieć, że powinien to być [self.cell setName: @ "NAME"]; a następnie [self.emitter setValue: ... forKeyPath: @ "emitterCells.NAME.yAcceleration"]; Odpowiedź w tej chwili jest myląca, ponieważ komórka jest takim ogólnym terminem, zastanawiam się, czy modyfikujesz kluczową ścieżkę? – Cindeselia

+0

@Cindeselia późniejszą częścią jest po prostu wyjaśnienie, że nazwa komórki w ich przypadku była komórką. Jeśli przypisałeś swoje imię "foo", wówczas keyPath będzie "emitterCells.foo.yAcceleration". – Warpling

0

Gdy init self.emitter z nowej komórki, obiekt zostanie zachowany, więc .. gdy zmienisz cell.yAcceleration z timerem, komórka self.emitter nie może być zmieniona, self.cell.yAcceleration została już zmieniona. Więc powinieneś użyć ścieżki klucza self.emitter.

Powiązane problemy