OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同,附带源码。

OC代码样式:

self.view.backgroundColor = [UIColor blackColor];

    

    //加载颗粒状的火花图片

    CAEmitterLayer *emitterLa = [CAEmitterLayer layer];

    emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height*(.75));//*(0.75)

    emitterLa.renderMode = kCAEmitterLayerAdditive;

    

    //在爆炸前逐渐隐藏发射颗粒

    CAEmitterCell *emitterCeRocket = [CAEmitterCell emitterCell];

    emitterCeRocket.emissionLongitude = -M_PI/2;

    emitterCeRocket.emissionLatitude = 0;

    emitterCeRocket.lifetime = 1.6;

    emitterCeRocket.birthRate = 1;

    emitterCeRocket.velocity = 400;

    emitterCeRocket.velocityRange = 100;

    emitterCeRocket.yAcceleration = 250;

    emitterCeRocket.emissionRange = M_PI/4;

    emitterCeRocket.color = CGColorCreateCopy([UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.5].CGColor);

    emitterCeRocket.redRange = 0.5;

    emitterCeRocket.greenRange = 0.5;

    emitterCeRocket.blueRange = 0.5;

    //设置动画效果的路径名称

    [emitterCeRocket setName:@"rocket"];

    

    //添加路径状态

    CAEmitterCell *emitterCeFly = [CAEmitterCell emitterCell];

    emitterCeFly.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeFly.emissionLongitude = (4*M_PI)/2;

    emitterCeFly.scale = 0.4;

    emitterCeFly.velocity = 100;

    emitterCeFly.birthRate = 45;

    emitterCeFly.lifetime = 1.5;

    emitterCeFly.yAcceleration = 350;

    emitterCeFly.emissionRange = M_PI/7;

    emitterCeFly.alphaSpeed = -0.7;

    emitterCeFly.scaleSpeed = -0.1;

    emitterCeFly.scaleRange = 0.1;

    emitterCeFly.beginTime = 0.01;

    emitterCeFly.duration = 0.7;

    

    //设置爆炸

    CAEmitterCell *emitterCeFirework = [CAEmitterCell emitterCell];

    emitterCeFirework.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeFirework.birthRate = 9999;

    emitterCeFirework.scale = 0.6;

    emitterCeFirework.velocity = 130;

    emitterCeFirework.lifetime = 2;

    emitterCeFirework.alphaSpeed = -0.2;

    emitterCeFirework.yAcceleration = 80;

    emitterCeFirework.beginTime = 1.5;

    emitterCeFirework.duration = 0.1;

    emitterCeFirework.emissionRange = 2*M_PI;

    emitterCeFirework.scaleSpeed = -0.1;

    emitterCeFirework.spin = 2;

    //设置爆炸动画名称

    [emitterCeFirework setName:@"firework"];

    

    //添加重复过程

    CAEmitterCell *emitterCePreSpark = [CAEmitterCell emitterCell];

    emitterCePreSpark.birthRate = 80;

    emitterCePreSpark.velocity = emitterCeFirework.velocity*0.7;

    emitterCePreSpark.lifetime = 1.7;

    emitterCePreSpark.yAcceleration = emitterCeFirework.yAcceleration*0.85;

    emitterCePreSpark.beginTime = emitterCeFirework.beginTime-0.2;

    emitterCePreSpark.emissionRange = emitterCeFirework.emissionRange;

    emitterCePreSpark.greenSpeed = 100;

    emitterCePreSpark.blueSpeed = 100;

    emitterCePreSpark.redSpeed = 100;

    //设置重复动画名称

    [emitterCePreSpark setName:@"preSpark"];

    

    //烟花最后的闪光

    CAEmitterCell *emitterCeSparkle = [CAEmitterCell emitterCell];

    emitterCeSparkle.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeSparkle.lifetime = 0.05;

    emitterCeSparkle.yAcceleration = 250;

    emitterCeSparkle.beginTime = 0.8;

    emitterCeSparkle.scale = 0.4;

    emitterCeSparkle.birthRate = 10;

    

    emitterCePreSpark.emitterCells = [NSArray arrayWithObjects:emitterCeSparkle, nil];

    emitterCeRocket.emitterCells = [NSArray arrayWithObjects:emitterCeFly,emitterCeFirework,emitterCePreSpark, nil];

    emitterLa.emitterCells = [NSArray arrayWithObjects:emitterCeRocket, nil];

    

    [self.view.layer addSublayer:emitterLa];

Swift的代码样式:

self.view.backgroundColor = UIColor.blackColor();

        

        //加载颗粒状的火花图片

        let emitterLa = CAEmitterLayer();

        emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height*0.75);

        emitterLa.renderMode = kCAEmitterLayerAdditive;

        

        //爆炸前逐渐隐藏发射颗粒

        let emitterCeRocket = CAEmitterCell();

        emitterCeRocket.emissionLongitude = CGFloat(-M_PI_2);

        emitterCeRocket.emissionLatitude = 0;

        emitterCeRocket.lifetime = 1.6;

        emitterCeRocket.birthRate = 1;

        emitterCeRocket.velocity = 400;

        emitterCeRocket.velocityRange = 100;

        emitterCeRocket.yAcceleration = 250;

        emitterCeRocket.emissionRange = CGFloat(M_PI/4);

        emitterCeRocket.color = CGColorCreateCopy(UIColor(red: 0.5, green:0.5, blue:0.5, alpha:0.5).CGColor);

        emitterCeRocket.redRange = 0.5;

        emitterCeRocket.greenRange = 0.5;

        emitterCeRocket.blueRange = 0.5;

        //设置动画效果的路径名称

        emitterCeRocket.name = "rocket";

        

        //添加路径状态

        let emitterCeFly = CAEmitterCell();

        emitterCeFly.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeFly.emissionLongitude = CGFloat((4*M_PI)/2);

        emitterCeFly.scale = 0.4;

        emitterCeFly.velocity = 100;

        emitterCeFly.birthRate = 45;

        emitterCeFly.lifetime = 1.5;

        emitterCeFly.yAcceleration = 350;

        emitterCeFly.emissionRange = CGFloat(M_PI/7);

        emitterCeFly.alphaSpeed = -0.7;

        emitterCeFly.scaleSpeed = -0.1;

        emitterCeFly.scaleRange = 0.1;

        emitterCeFly.beginTime = 0.01;

        emitterCeFly.duration = 0.7;

        

        //设置爆炸

        let emitterCeFirework = CAEmitterCell();

        emitterCeFirework.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeFirework.birthRate = 9999;

        emitterCeFirework.scale = 0.6;

        emitterCeFirework.velocity = 130;

        emitterCeFirework.lifetime = 2;

        emitterCeFirework.alphaSpeed = -0.2;

        emitterCeFirework.yAcceleration = 80;

        emitterCeFirework.beginTime = 1.5;

        emitterCeFirework.duration = 0.1;

        emitterCeFirework.emissionRange = CGFloat(2*M_PI);

        emitterCeFirework.scaleSpeed = -0.1;

        emitterCeFirework.spin = 2;

        //设置爆炸动画名称

        emitterCeFirework.name = "firework";

        

        //添加重复过程

        let emitterCePreSpark = CAEmitterCell();

        emitterCePreSpark.birthRate = 80;

        emitterCePreSpark.velocity = emitterCeFirework.velocity*0.7;

        emitterCePreSpark.lifetime = 1.7;

        emitterCePreSpark.yAcceleration = emitterCeFirework.yAcceleration*0.85;

        emitterCePreSpark.beginTime = emitterCeFirework.beginTime-0.2;

        emitterCePreSpark.emissionRange = emitterCeFirework.emissionRange;

        emitterCePreSpark.greenSpeed = 100;

        emitterCePreSpark.blueSpeed = 100;

        emitterCePreSpark.redSpeed = 100;

        //设置重复动画名称

        emitterCePreSpark.name = "preSpark";

        

        //烟花最后的闪光

        let emitterCeSparkle = CAEmitterCell();

        emitterCeSparkle.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeSparkle.lifetime = 0.05;

        emitterCeSparkle.yAcceleration = 250;

        emitterCeSparkle.beginTime = 0.8;

        emitterCeSparkle.scale = 0.4;

        emitterCeSparkle.birthRate = 10;

        

        emitterCePreSpark.emitterCells = NSArray.init(objects:emitterCeSparkle) as? [CAEmitterCell];

        emitterCeRocket.emitterCells = NSArray.init(objects:emitterCeFly,emitterCeFirework,emitterCePreSpark) as? [CAEmitterCell];

        emitterLa.emitterCells = NSArray.init(objects: emitterCeRocket) as? [CAEmitterCell];

        

        self.view.layer.addSublayer(emitterLa);

源码下载:http://download.csdn.net/detail/hbblzjy/9584992

效果图:

                 

最新文章

  1. Allocators与Criterion的相同点及区别
  2. socket学习之聊天室
  3. 《驾驭Core Data》 第一章 Core Data概述
  4. XTU 1242 Yada Number 容斥
  5. linux CPU loading calculate
  6. how to make form:checkboxes in JSP
  7. NYOJ-744蚂蚁的难题(一)
  8. Redis学习笔记之单机实现
  9. spark 分析日志文件(key,value)
  10. mysql information_schema介绍
  11. springCloud微服务入门
  12. Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)
  13. 创建一个 SQLite 数据库
  14. [转] String to Date conversion in hive - 在 Hive 中各种字符串转换成日期格式
  15. 将一个表的数据导入到另一个表的sql
  16. failed to open stream: No such file or directory 报错解决方法
  17. CVE-2015-1642 POC
  18. Invalidate、RedrawWindow与UpdateWindow的差别
  19. Mysql显示所有数据库
  20. Atcoder regular Contest 073(C - Sentou)

热门文章

  1. MongoDB 固定集合
  2. 安卓高级5 zXing
  3. iOS开源加密相册Agony的实现(六)
  4. Android-Tab
  5. Mac入门——快捷键
  6. 04_关于元数据,ResultSetMetaData对象以及API方法介绍
  7. 【一天一道Leetcode】#190.Reverse Bits
  8. iOS下JS与OC互相调用(二)--WKWebView 拦截URL
  9. androidpn-server笔记及BUG修改
  10. Python与JavaWeb的第一次碰撞