CAEmitterCell не учитывает значение продолжительности

У меня есть эмиттер, который я хочу отключить через 2 секунды, но я не могу заставить его перестать работать!

мой код выглядит следующим образом:

// Emitter Layer
    //
    emitter = [CAEmitterLayer layer];
    emitter.emitterSize = CGSizeMake(20, 20);
    emitter.renderMode = @"additive";
    emitter.emitterMode = @"points";
    emitter.emitterShape = @"rectangle";
    emitter.emitterPosition = CGPointMake(310, 230);
    //emitter.duration = 2; // setting duration on the emitterLayer prevents anything from firing it seems

// Emitter Cells
    //

    // 'New Emitter' cell configuration
    newEmitter = [CAEmitterCell emitterCell];
    newEmitter.scaleSpeed = 7;
    newEmitter.lifetime = 2.481715;
    //newEmitter.duration = 2; // I would expect this to stop the emitter after 2 seconds, but it doesn't!
    newEmitter.velocity = 332.3636968085106;
    newEmitter.contents = newemitterImg;
    newEmitter.name = @"New Emitter";
newEmitter.scaleRange = 4.178236607142859;
    newEmitter.lifetimeRange = 1.6;
    newEmitter.greenRange = -2.775558e-17;
    newEmitter.birthRate = 40;
    newEmitter.emissionRange = -6.283185306666667;
    newEmitter.scale = 0;

    // Emitter Cell Chains
    //

    emitter.emitterCells = [NSArray arrayWithObjects:newEmitter, nil];

Кажется, что об этом очень мало информации, несмотря на то, что он является частью iOS около 2 лет!


person Alan Taylor    schedule 13.04.2013    source источник


Ответы (1)


Вы можете сделать это с помощью таймера и метода остановки эмиттера, генерирующего новые частицы...

В конце существующего кода добавьте:

    [newEmitter setName:@"newEmitter"];
    [NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(stopEmitter:)
                                   userInfo:nil
                                    repeats:NO];

Затем создайте метод stopEmitter:…

    - (void) stopEmitter:(NSTimer*)timer
    {
        [emitter setValue:@0
               forKeyPath:@"emitterCells.newEmitter.birthRate"];
    }
person foundry    schedule 14.04.2013
comment
Большое спасибо! Ваша помощь здесь была чрезвычайно полезной! - person Alan Taylor; 15.04.2013
comment
установка рождаемости на самом экземпляре CAEmitterLayer решила эту проблему для меня. Возможно, что-то изменилось в более поздних версиях iOS? - person seabass; 12.02.2016