CAEmitterLayer笔记

  • CAEmitterLayer本质是一个粒子发射器,他可以以容器的形式包含CAEmitterCell作为模板创造出不同的粒子流.
CAEmitterLayer笔记_第1张图片
屏幕快照 2016-09-06 下午3.05.51.png

.

        let snowEmitter = CAEmitterLayer()
        snowEmitter.emitterPosition = CGPointMake(self.view.bounds.size.width , 300)
        snowEmitter.emitterSize  = CGSizeMake(self.view.bounds.size.width * 0.1, 100)
        snowEmitter.emitterShape = kCAEmitterLayerRectangle
        snowEmitter.emitterMode  = kCAEmitterLayerVolume
        snowEmitter.birthRate = 5.0
  • 我们创建的这个雪花发射器容易的anchorPoint为默认值(0.5, 0.5), 即Position对应它的Center, 这就不难理解它的emitterPosition 会在截图屏幕右贴边出现,而其emitterSize是要结合emitterShape使用的,有些shape例如kCAEmitterLayerLine 他是不关心这个emitterSize的height值的,因为y值的改动对一条线是不起作用的.kCAEmitterLayerVolume(也是emitterMode的默认值),他规定了发射模式源于这个粒子发射器的position.
    假设我们把emitterSize的宽和高改为0 , 那么即使他的Shape是一个矩形, 也会表现出kCAEmitterLayerPoint形状, 那假设我们把它的emitterPosition 改为
snowEmitter.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, 300) snowEmitter.emitterSize  = CGSizeMake(self.view.bounds.size.width * 0.5, 100)

那就会呈现出如下图的发射位置和范围

CAEmitterLayer笔记_第2张图片
屏幕快照 2016-09-06 下午3.32.32.png
  • 图中明显可以看到这个粒子发射器的发射位置居于屏幕中间, 并且发射范围变大了.
    birthRate在这里决定了(cell)的每秒创造数, 默认值为1, 值越多则每秒呈现的的雪花越多.
  • 那假设
        snowEmitter.emitterShape = kCAEmitterLayerCuboid
        snowEmitter.emitterDepth = 1000
        snowEmitter.emitterZPosition = 500
我们把发射器的形状改为立方体, 为了让它出现的真正的立体效果, 我们可以把他的PositionZ值赋值为500.而emitterDepth则可以确定他的发射纵深, 即可以在离屏幕Z轴500左右的位置,Z轴1000范围内的立方体内随意发射.
kCAEmitterLayerOutline kCAEmitterLayerSurface 这两个的区别应该是一个发射基础Shape的轮廓, 另一个则是基于这个Shape的表面, 区别是有的,奈何笔者眼力有限,没有看出更细微的区别.

你可能感兴趣的:(CAEmitterLayer笔记)