1

如何在应用程序上创建一个神奇的闪闪发光的效果?

4

1 回答 1

0
//Header file

#import "QuartzCore/QuartzCore.h"

@interface SparklesViewController : UIViewController
{
 CAEmitterLayer *emitter;
}  

//Implementation file

  - (void)viewDidLoad
    {
        [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(destroyEmitter) userInfo:nil repeats:YES];
         [self sparklesIt];
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }

    -(void)sparklesIt
    {
     int delay;

     UIImage *image;

     int imgSel=[self numberWithMin:0 :6];
     switch (imgSel) {
      case 0:
       image=[UIImage imageNamed:@"green.png"];
       break;
      case 1:
       image=[UIImage imageNamed:@"silver.png"];
       break;
      case 2:
       image=[UIImage imageNamed:@"yellow.png"];
       break;
      case 3:
       image=[UIImage imageNamed:@"red.png"];
       break;
      case 4:
       image=[UIImage imageNamed:@"purple.png"];
       break;
      case 5:
       image=[UIImage imageNamed:@"pink.png"];
       break;
      case 6:
       image=[UIImage imageNamed:@"blue.png"];
       break;
      default:
       break;
     }

     CGPoint pt=CGPointMake([self numberWithMin:0 :320],[self numberWithMin:0 :460]);

     float multiplier=0.25f;

     //create the emitter layer
     emitter=[CAEmitterLayer layer];
     emitter.emitterPosition=pt;
     emitter.emitterMode=kCAEmitterLayerOutline;
     emitter.emitterShape=kCAEmitterLayerCircle;
     emitter.renderMode=kCAEmitterLayerAdditive;
     emitter.emitterSize=CGSizeMake(100*multiplier, 0);

     //Flare particles emitted from the rocket as it flys
     CAEmitterCell *flare = [CAEmitterCell emitterCell];
     flare.contents = (__bridge id)([image CGImage]);
     flare.emissionLongitude = (4 * M_PI) / 2;
     flare.scale = 0.4;
     flare.velocity = 100;
     flare.birthRate = 45;
     flare.lifetime = 1;
     flare.emissionRange = M_PI / 7;
     flare.alphaSpeed = -0.7;
     flare.scaleSpeed = -0.1;
     flare.scaleRange = 0.1;
     flare.beginTime = 0.01;
     flare.duration = 0.7;

     emitter.emitterCells=[NSArray arrayWithObject:flare];
     [self.view.layer addSublayer:emitter];

     delay=[self numberWithMin:5 :10];
     [self performSelector:@selector(sparklesIt) withObject:nil afterDelay:delay];
    }

    -(void)destroyEmitter
    {
     NSLog(@"destroy emitter called ");
     if (emitter!=nil) {
      [emitter removeFromSuperlayer];
      emitter=nil;
     }
    }

    -(int)numberWithMin:(int)min:(int)max
    {
     return rand() % (max - min) + min;
    }

//绿色,紫色,红色等是名称中指定的不同颜色的星星图像,它们的大小为16x16

于 2012-12-18T07:38:36.827 回答