1.使用系统自带的类可以实现烟花等很绚丽的效果(下面是一个点击屏幕释放烟花,直接上代码,里面会有注释)
2.在这里,我将CAEmitterLayer看作是一个发射图层,emitterPosition属性设置它的粒子发射点,CAEmitterCell设置它将要发射的粒子的颜色,发射半径,发射方式等。
3.在这个类的使用中,如果需要加入点击屏幕的事件,那么多数需要用到接受粒子的坐标,然后将它存放到数组的函数,在这介绍一下,将CGPoint 结构体在数组中的存取的方式
存:[myArray addObject: NSStringFromCGPoint(myPoint)];
取:CGPointFromString((NSString*)[xxx objectAtIndex:0])
注:工程中必须导入<QuartzCore/QuartzCore.h>框架
#import "TouchStar.h"
#import <QuartzCore/QuartzCore.h>
@implementation TouchStar
{
CAEmitterLayer *starEmitter;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
starEmitter = [CAEmitterLayer layer];//创建一个显示粒子的图层
starEmitter.frame = self.layer.bounds;//设置他的大小
[self.layer addSublayer:starEmitter];
starEmitter.renderMode = kCAEmitterLayerAdditive;//粒子显示时的模式,这种是最亮的
//create particle emitter layer
CAEmitterCell *cell1 = [[CAEmitterCell alloc]init];
cell1.contents = (__bridge id)[UIImage imageNamed:@"9.png"].CGImage;//contents 这个和CALayer一样,只是用来设置图片
cell1.birthRate =100; //每秒某个点产生的effectCell数量
cell1.lifetime = 5.0; //粒子的生命周期,既在屏幕上的显示时间要多长。
cell1.color = [UIColor blueColor].CGColor;
cell1.alphaSpeed = -0.5;//就是说粒子的透明度每过一秒就是减少0.5,
cell1.velocity = 50; //velocity 表示cell向屏幕右边飞行的速度
cell1.velocityRange = 100; //velocityRange 在右边什么范围内飞行
cell1.emissionRange = M_PI;//emissionRange表 +- 角度扩散
//设置两种不同颜色的粒子,你也可以设置其他的颜色,形成绚丽的烟花效果
CAEmitterCell *cell = [[CAEmitterCell alloc]init];
cell.contents = (__bridge id)[UIImage imageNamed:@"9.png"].CGImage;
cell.birthRate = 100;
cell.lifetime = 5.0;
cell.color = [UIColor redColor].CGColor;
cell.alphaSpeed = -0.4;
cell.velocity = 50;
cell.velocityRange = 100;
cell.emissionRange = M_PI;
//将设置好的粒子加到发射器中
starEmitter.emitterCells = @[cell,cell1];
}
return self;
}
#pragma mark
#pragma mark - 接收屏幕触摸点
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
starEmitter.birthRate =100;
//[touches anyObject]获取屏幕触摸点中的任意一点
// locationInView 返回CGPoint类型,
starEmitter.emitterPosition =[[touches anyObject] locationInView:self];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.当触摸结束之后,将粒子的发射量设置为0,
//2.然后当再次接受到屏幕点击的时候,(touchesBegan:)在将发射图层的发射点的位置设置为你接收到的位置
//3.然后在将发射量打开即可
starEmitter.birthRate = 0;
}
@end