iOS CAEmitterCell烟花效果

标签 ios ios5

我想创造烟花般的效果。我知道我可以为它使用 CAEmitterCell。我试着下载了几个示例,但我仍在使用 iOS 5.0 中的此功能

有人知道如何使用 CAEmitterCell 创建烟花效果的好教程吗?

我需要创建如下内容:

enter image description here

所有粒子都从中心(红色圆圈)向绿色圆圈方向移动。红圈这是初始点,将具有一些 CGPoint 值。

最佳答案

我找到了这个解决方案:

这是 DWFParticleView.h 文件的样子

#import <UIKit/UIKit.h>

@interface DWFParticleView : UIView

@property (nonatomic) CGFloat time;

-(void)configurateEmmiter;
-(void)setEmitterPositionFromTouch: (UITouch*)t;
-(void)setIsEmitting:(BOOL)isEmitting andPoint:(CGPoint)point;

@end

这是 DWFParticleView.m 的样子

#import "DWFParticleView.h"
#import <QuartzCore/QuartzCore.h>

@implementation DWFParticleView
{
    CAEmitterLayer* fireEmitter; //1
}

-(void)configurateEmmiter
{
    //set ref to the layer
    fireEmitter = (CAEmitterLayer*)self.layer; //2

    //configure the emitter layer
    fireEmitter.emitterPosition = CGPointMake(50, 50);
    fireEmitter.emitterSize = CGSizeMake(5, 5);

    CAEmitterCell* fire = [CAEmitterCell emitterCell];
    fire.birthRate = 0;
    fire.lifetime = 2.0;
    fire.lifetimeRange = 0.5;
    //fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.6] CGColor];
    fire.contents = (id)[[UIImage imageNamed:@"star_icon.png"] CGImage];
    [fire setName:@"fire"];


    fire.velocity = 80;
    fire.velocityRange = 20;
    fire.emissionRange = M_PI * 2.0f;

    fire.scaleSpeed = 0.1;
    fire.spin = 0.5;

    //add the cell to the layer and we're done
    fireEmitter.emitterCells = [NSArray arrayWithObject:fire];

    fireEmitter.renderMode = kCAEmitterLayerAdditive;

}

+ (Class) layerClass {
    return [CAEmitterLayer class];
}

-(void)setEmitterPositionFromTouch: (UITouch*)t
{
    //change the emitter's position
    fireEmitter.emitterPosition = [t locationInView:self];
}

-(void)setIsEmitting:(BOOL)isEmitting andPoint:(CGPoint)point
{

    fireEmitter.emitterPosition = point;

    //turn on/off the emitting of particles
    [fireEmitter setValue:[NSNumber numberWithInt:isEmitting?50:0]
               forKeyPath:@"emitterCells.fire.birthRate"];


    [self performSelector:@selector(decayStep) withObject:nil afterDelay:self.time];
}

- (void)decayStep {
    [fireEmitter setValue:[NSNumber numberWithInt:0]
               forKeyPath:@"emitterCells.fire.birthRate"];
}

@end

例如,这是显示我们的效果的点击屏幕的方法

- (void)tap {
    DWFParticleView *fireView = [[DWFParticleView alloc] init];
    fireView.time = 0.3;
    [fireView setUserInteractionEnabled:NO];
    [fireView configurateEmmiter];
    [fireView setFrame:CGRectMake(0, 0, 0, 0)];
    [fireView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:fireView];
}

我在这里找到的 Material :ray

关于iOS CAEmitterCell烟花效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184136/

相关文章:

ios - 无法将类型 '(String?, Bool, [AnyObject]?, NSError?) -> ()' 的值分配给

objective-c - iOS:获取图像标签

ios - 使用 RestKit 从 URL 下载 Mp3

iOS:如何从 DetailView 导航到 DetailView?

ios - 随机生成 "-1"或 "1"- 最短方法

ios - 使用内置的 CoreData 选项在外部位置存储 blob

iOS 8 在应用程序启动时检测设备方向

objective-c - iOS 重复/僵尸 View Controller 被引用

iphone - 允许访问iOS 5.0中我的应用程序的iPhone联系人

iphone - 如何在ios5中每30秒在后台运行我的应用程序一次?