粒子效果

2019-06-24  本文已影响0人  silasjs

粒子效果

说到粒子效果,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
上一篇下一篇

猜你喜欢

热点阅读