Example #1
0
        public void AwakeFromNib()
        {
            //Create the root layer
            rootLayer = CALayer.Layer;

            //Set the root layer's background color to black
            rootLayer.BackgroundColor = CGColor.GetConstantColor(CGColor.kCGColorBlack);

            //Create the fire emitter layer
            fireEmitter = CAEmitterLayer.Layer;
            fireEmitter.EmitterPosition = new CGPoint(225, 50);
            fireEmitter.EmitterMode = CAEmitterLayer.kCAEmitterLayerOutline;
            fireEmitter.EmitterShape = CAEmitterLayer.kCAEmitterLayerLine;
            fireEmitter.RenderMode = CAEmitterLayer.kCAEmitterLayerAdditive;
            fireEmitter.EmitterSize = new CGSize(0, 0);

            //Create the smoke emitter layer
            smokeEmitter = CAEmitterLayer.Layer;
            smokeEmitter.EmitterPosition = new CGPoint(225, 50);
            smokeEmitter.EmitterMode = CAEmitterLayer.kCAEmitterLayerPoints;

            //Create the fire emitter cell
            CAEmitterCell fire = CAEmitterCell.EmitterCell;
            fire.EmissionLongitude = (float) Math.PI;
            fire.BirthRate = 0;
            fire.Velocity = 80;
            fire.VelocityRange = 30;
            fire.EmissionRange = 1.1f;
            fire.YAcceleration = 200;
            fire.ScaleSpeed = 0.3f;
            IntPtr color = CGColor.CreateGenericRGB(0.8f, 0.4f, 0.2f, 0.10f);
            fire.Color = color;
            CGColor.Release(color);
            fire.ContentsPointer = CGImageNamed("fire.png");

            //Name the cell so that it can be animated later using keypaths
            fire.Name = "fire";

            //Add the fire emitter cell to the fire emitter layer
            fireEmitter.EmitterCells = NSArray.ArrayWithObject(fire);

            //Create the smoke emitter cell
            CAEmitterCell smoke = CAEmitterCell.EmitterCell;
            smoke.BirthRate = 11;
            smoke.EmissionLongitude = (float)(Math.PI / 2);
            smoke.Lifetime = 0;
            smoke.Velocity = 40;
            smoke.VelocityRange = 20;
            smoke.EmissionRange = (float)(Math.PI / 4);
            smoke.Spin = 1;
            smoke.SpinRange = 6;
            smoke.YAcceleration = 160;
            smoke.ContentsPointer = CGImageNamed("smoke.png");
            smoke.Scale = 0.1f;
            smoke.AlphaSpeed = -0.12f;
            smoke.ScaleSpeed = 0.7f;

            //Name the cell so that it can be animated later using keypaths
            smoke.Name = "smoke";

            //Add the smoke emitter cell to the smoke emitter layer
            smokeEmitter.EmitterCells = NSArray.ArrayWithObject(smoke);

            //Add the two emitter layers to the root layer
            rootLayer.AddSublayer(smokeEmitter);
            rootLayer.AddSublayer(fireEmitter);

            //Set the view's layer to the base layer
            view.Layer = rootLayer;
            view.WantsLayer = true;

            //Set the fire simulation to reflect the initial slider position
            this.SlidersChanged(this);

            //Force the view to update
            view.NeedsDisplay = true;
        }