Chciałbym stworzyć efekt cząsteczkowy, który emituje tylko wtedy, gdy użytkownik dotknie ekranu, ale nie mogę zmienić właściwości birthRate CAEmitterCell, gdy zostanie ustawiona wartość niezerowa.CAEmitterCell nie respektuje zmiany parametru birthRate
Mam podklasę UIView, która ustawia moje CAEmitterLayer i moje CAEmitterCell dokładnie tak, jak chcę. Ja definiowania dwie właściwości w tej klasie:
@property (strong, nonatomic) CAEmitterLayer *emitterLayer;
@property (strong, nonatomic) CAEmitterCell *emitterCell;
Wtedy, moim zdaniem regulatora, ja dotyka śledzenia, ustawienie pozycji emitterLayer i emitterCell urodzeń:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"began x:%f y:%f",tappedPt.x, tappedPt.y);
emitterView.emitterCell.birthRate = 42;
emitterView.emitterLayer.emitterPosition = tappedPt;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"moved x:%f y:%f",tappedPt.x, tappedPt.y);
emitterView.emitterLayer.emitterPosition = tappedPt;
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"ending %f", emitterView.emitterCell.birthRate);
emitterView.emitterCell.birthRate = 0.00;
NSLog(@"ended %f", emitterView.emitterCell.birthRate);
}
Sprawozdania dziennika emitterView.emitterCell.birthRate zmienia:
began x:402.000000 y:398.500000
ending 42.000000
ended 0.000000
kiedy dotknąć ekranu, rozpoczyna emiter zgodnie z oczekiwaniami, warstwa następuje w dotyku, ale kiedy zakończyć dotyku, emitować ter cell szczęśliwie emituje dowolną wartość ustawioną początkowo (wartość ustawiona w touchesBegan). Cokolwiek robię, nie mogę wydawać się w stanie zmienić wartości narodzin, gdy tylko ustawi się wartość niezerową. Dziennik informuje, że wartości są ustawione prawidłowo, ale emitent emituje sygnał.
Jednakże, jeśli mogę zmienić metodę touchesEnded aby zmienić położenie warstwy, po tym, jak ustawić wskaźnik urodzeń na emitterCell wtedy wszystko działa zgodnie z oczekiwaniami:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"began x:%f y:%f",tappedPt.x, tappedPt.y);
NSLog(@"ending %f", emitterView.emitterCell.birthRate);
emitterView.emitterCell.birthRate = 0.0;
NSLog(@"ended %f", emitterView.emitterCell.birthRate);
emitterView.emitterLayer.emitterPosition = tappedPt;
}
Może ktoś proszę wyjaśnić dlaczego?
czy kiedykolwiek tego dowiedzieć? – scott