美文网首页
粒子效果

粒子效果

作者: silasjs | 来源:发表于2019-06-24 23:21 被阅读0次

    粒子效果

    说到粒子效果,iPhone用户应该经常见到的,比如下雨天时天气app中的雨滴效果。还有和小伙聊微信时不小心输入了某些关键字触发了粒子效果,满屏幕的掉表情、红包、元宝什么的。这些很酷炫的动画效果,在iOS中使用起来其实很方便,这都要得益于苹果爸爸一贯封装的便利性。

    在图形绘制和动画方面,苹果主要为大家提供了QuartzCore框架。其中基类CALayer下有很多特殊的图层:

    CALayer的子类 说明
    CATransformlayer 用于渲染3D Layer层次结构
    CATiledLayer 用于管理一副可以分割的大图
    CATextLayer 用户绘制AttirbuteString
    CAShapelayer 用于绘制立体,贝塞尔曲线
    CAScorllayer 用于管理可滑动区域
    CAReplicationLayer 用于自动复制subLayer
    CAEGLayer 用于OpenGLES绘制图层
    CAGradientLayer 用于控制颜色渐变
    CAEmitterlayer 用于控制粒子效果

    这里粒子效果主要用到两个类:CAEmitterLayer和CAEmitterCell。用起来很简单,基本就是创建后给属性赋值,这里就是个简单的例子:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.emitterLayer.emitterCells = @[[self emitterCellWithTextureName:@"jinbi"],
                                           [self emitterCellWithTextureName:@"zongzi2.jpg"],
                                           [self emitterCellWithTextureName:@"zongzi"],
                                           [self emitterCellWithTextureName:@"hongbao"]];
    }
    
    - (CAEmitterCell *)emitterCellWithTextureName:(NSString *)textureName {
        CAEmitterCell *cell = [CAEmitterCell emitterCell];
        cell.birthRate = 1.0f;
        cell.lifetime = 30.0f;
        cell.speed = 2.0f;
        cell.velocity = 10.0f;
        cell.velocityRange = 10.0f;
        cell.yAcceleration = 60.0f;
        cell.scale = 0.1f;
        cell.scaleRange = 0.0f;
        cell.contents = (id)[UIImage imageNamed:textureName].CGImage;
        return cell;
    }
    
    - (CAEmitterLayer *)emitterLayer {
        if (nil == _emitterLayer) {
            CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
            emitterLayer.emitterShape = kCAEmitterLayerLine;
            emitterLayer.emitterMode = kCAEmitterLayerSurface;
            emitterLayer.emitterSize = self.view.bounds.size;
            emitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5f, -10.0f);
            [self.view.layer addSublayer:emitterLayer];
            _emitterLayer = emitterLayer;
        }
        return _emitterLayer;
    }
    

    就这么一点代码,有时间的话,调试调试参数,脑洞大一点就可以做出各种效果。赶快来试试吧!这里就下个红包粽子雨。

    红包粽子雨.gif

    相关文章

      网友评论

          本文标题:粒子效果

          本文链接:https://www.haomeiwen.com/subject/dwzaqctx.html