2013-04-13 3 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]; 

약 2 년 동안 아이폰 OS의 일부 임에도 불구하고이 사용할 수에 대한 아주 작은 정보가 될 것 같다! 기존의 코드를 추가의 끝에서

답변

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