HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 当它结束CAEmitterLayer的CAEmitter单元格的生命周期时如何删除CAEmitterLayer – 而不是重复直到从超级图层中删除它大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在以略微改变的方式使用通用代码(来自iOS Fireworks演示).我在UIView的子类中有以下内容.我想要的是让烟花出现在用户触摸的位置(不是很难),并播出CAEmitterLayer / CAEmitterCells’生命周期’的长度.相反,当我将它添加到addSublayer时,这会立即开始 – 就像我确定它的意思.但是,我想以稍微不同的方式使用它.有没有办法可以改变这个,所以有一个带有完成块的CAtransaction(要删除.FromSuperlayer)或类似的东西?欢迎任何想法.

#import "FireworksView.h"

    @implementation FireworksView

 - (void)launchFirework{

    //Load the spark image for the particle

    CAEmitterLayer *mortor = [CAEmitterLayer layer];
    mortor.emitterPosition = CGPointMake(self.bounds.size.width/2,self.bounds.size.height*(.75));
    mortor.renderMode = kCAEmitterLayerAdditive;

    //Invisible particle represenTing the rocket before the explosion
    CAEmitterCell *rocket = [CAEmitterCell emitterCell];
    rocket.emissionLongitude = -M_PI / 2;
    rocket.emissionLatitude = 0;
    rocket.lifetime = 1.6;
    rocket.birthRate = 1;
    rocket.veLocity = 400;
    rocket.veLocityRange = 100;
    rocket.yAcceleration = 250;
    rocket.emissionRange = M_PI / 4;
    rocket.color = CGColorCreateCopy([UIColor colorWithRed:.5 green:.5 blue:.5 alpha:.5].CGColor);
    rocket.redRange = 0.5;
    rocket.greenRange = 0.5;
    rocket.blueRange = 0.5;

    //Name the cell so that it can be animated later using keypath
    [rocket setName:@"rocket"];

    //Flare particles emitted from the rocket as it flys
    CAEmitterCell *Flare = [CAEmitterCell emitterCell];
    Flare.contents = (id)[UIImage imagenamed:@"tspark.png"].CGImage;
    Flare.emissionLongitude = (4 * M_PI) / 2;
    Flare.scale = 0.4;
    Flare.veLocity = 100;
    Flare.birthRate = 45;
    Flare.lifetime = 1.5;
    Flare.yAcceleration = 350;
    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;

    //The particles that make up the explosion
    CAEmitterCell *firework = [CAEmitterCell emitterCell];
    firework.contents = (id)[UIImage imagenamed:@"tspark.png"].CGImage;
    firework.birthRate = 9999;
    firework.scale = 0.6;
    firework.veLocity = 130;
    firework.lifetime = 2;
    firework.alphaSpeed = -0.2;
    firework.yAcceleration = 80;
    firework.beginTime = 1.5;
    firework.duration = 0.1;
    firework.emissionRange = 2 * M_PI;
    firework.scaleSpeed = -0.1;
    firework.spin = 2;

    //Name the cell so that it can be animated later using keypath
    [firework setName:@"firework"];

    //preSpark is an invisible particle used to later emit the spark
    CAEmitterCell *preSpark = [CAEmitterCell emitterCell];
    preSpark.birthRate = 80;
    preSpark.veLocity = firework.veLocity * 0.70;
    preSpark.lifetime = 1.7;
    preSpark.yAcceleration = firework.yAcceleration * 0.85;
    preSpark.beginTime = firework.beginTime - 0.2;
    preSpark.emissionRange = firework.emissionRange;
    preSpark.greenSpeed = 100;
    preSpark.blueSpeed = 100;
    preSpark.redSpeed = 100;

    //Name the cell so that it can be animated later using keypath
    [preSpark setName:@"preSpark"];

    //The 'sparkle' at the end of a firework
    CAEmitterCell *spark = [CAEmitterCell emitterCell];
    spark.contents = (id)[UIImage imagenamed:@"tspark.png"].CGImage;
    spark.lifetime = 0.05;
    spark.yAcceleration = 250;
    spark.beginTime = 0.8;
    spark.scale = 0.4;
    spark.birthRate = 10;

    preSpark.emitterCells = [NSArray arrayWithObjects:spark,nil];
    rocket.emitterCells = [NSArray arrayWithObjects:Flare,firework,preSpark,nil];
    mortor.emitterCells = [NSArray arrayWithObjects:rocket,nil];

    [self.layer addSublayer:mortor];
        }

解决方法

答案是,使用CAEmitter,没有WAY – 委托等 – 在结束循环时停止发射器.当你认为应该删除它时,你唯一能做的就是优雅地将它从图层中移除.

大佬总结

以上是大佬教程为你收集整理的ios – 当它结束CAEmitterLayer的CAEmitter单元格的生命周期时如何删除CAEmitterLayer – 而不是重复直到从超级图层中删除它全部内容,希望文章能够帮你解决ios – 当它结束CAEmitterLayer的CAEmitter单元格的生命周期时如何删除CAEmitterLayer – 而不是重复直到从超级图层中删除它所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。