Search code examples
iphoneioscore-animationcaemitterlayer

CAEmitterLayer - kCAEmitterLayerRectangle render mode?


I want to make particles inside the rectangle.

What is wrong in this code? It is emitted from only the emitter position, not, random position in rectangle.

fireEmitter = [CAEmitterLayer layer];
[self.view.layer fireEmitter];
fireEmitter.emitterPosition = self.view.center;
fireEmitter.emitterSize =CGSizeMake(100, 100);
fireEmitter.renderMode = kCAEmitterLayerRectangle;
fireEmitter.emitterCells = [NSArray arrayWithObjects:fire, nil];

Solution

  • kCAEmitterLayerRectangle is not a valid value for renderMode. Instead you should use one of these values

    kCAEmitterLayerUnordered
    kCAEmitterLayerOldestFirst
    kCAEmitterLayerOldestLast
    kCAEmitterLayerBackToFront
    kCAEmitterLayerAdditive
    

    The kCAEmitterLayerRectangle value should be set as the emitterShape which defaults to kCAEmitterLayerPoint. That is why you are only emitting from a single point. The valid emitterShapes are:

    kCAEmitterLayerPoint
    kCAEmitterLayerLine
    kCAEmitterLayerRectangle
    kCAEmitterLayerCuboid
    kCAEmitterLayerCircle
    kCAEmitterLayerSphere
    

    Please refer to the documentation for their meaning.