2013-04-13 47 views
1

我有一個發射器,我想在2秒後結束,但我無法讓它停止運行!CAEmitterCell不考慮持續時間值

我的代碼如下:

// 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年能在這個資料非常少!

回答

4

你可以用一個定時器,並停止發射器產生新的粒子的方法做到這一點...

在現有的代碼添加結束:

[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"]; 
    } 
+0

非常感謝!你在這裏的幫助非常有用! –

+0

在CAEmitterLayer實例本身上設置birthRate爲我解決了它。也許在後來的iOS版本中有所改變? – seabass