CALayer子类有:
CATextLayer
CATiledLayer
CAReplicatorLayer //复制图层 波动图
CAEAGLLayer
CAShapeLayer //绘画图层 三角形
CAScrollLayer
CAGradientLayer //渐变颜色图层 变色器
CATransformLayer
CAEmitterLayer //粒子发射图层 烟花 、下雪
CAShapeLayer:绘画图层
func test(){
let path = UIBezierPath()
path.move(to: CGPoint(x:0,y:0))
path.addLine(to: CGPoint(x:width,y:0))
path.addLine(to: CGPoint(x:width,y:height))
path.addLine(to: CGPoint(x:0,y:height))
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
}
CAGradientLayer:渐变颜色图层
extension UIView {
func setBackColor() {
let gradientLayer0 = CAGradientLayer()
gradientLayer0.frame = self.bounds
gradientLayer0.colors = [
rgb(241,60,143).cgColor,
rgb(255,132,50).cgColor]
gradientLayer0.locations = [0, 1]
gradientLayer0.startPoint = CGPoint(x: 0, y: 1)
gradientLayer0.endPoint = CGPoint(x: 1, y: 1)
self.layer.insertSublayer(gradientLayer0, at: 0)
}
}
locations: 显示渐变区间,0~1 数组格式与colors配合使用
startPoint: 起始方向设置
endPoint: 结束方向设置
CAEmitterLayer:粒子发射图层
https://www.jianshu.com/p/197c2257f597
self.view.backgroundColor = UIColor.black
//加载颗粒状的火花图片
let emitterLa = CAEmitterLayer()
emitterLa.emitterPosition = CGPoint(x:self.view.bounds.size.width/2, y:self.view.bounds.size.height*0.85)
emitterLa.renderMode = kCAEmitterLayerAdditive
//爆炸前逐渐隐藏发射颗粒
let emitterCeRocket = CAEmitterCell()
emitterCeRocket.emissionLongitude = -CGFloat.pi/2
emitterCeRocket.emissionLatitude = 0
emitterCeRocket.lifetime = 1.6
emitterCeRocket.birthRate = 1
emitterCeRocket.velocity = 400
emitterCeRocket.velocityRange = 100
emitterCeRocket.yAcceleration = 250
emitterCeRocket.emissionRange = -CGFloat.pi/4
emitterCeRocket.color = UIColor.init(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: "snow")!.cgImage
emitterCeFly.emissionLongitude = CGFloat.pi*2
emitterCeFly.scale = 0.4
emitterCeFly.velocity = 100
emitterCeFly.birthRate = 700
emitterCeFly.lifetime = 1.5
emitterCeFly.yAcceleration = 350
emitterCeFly.emissionRange = CGFloat.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: "snow")!.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 = 1
emitterCeFirework.emissionRange = CGFloat.pi*2
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: "snow")!.cgImage
emitterCeSparkle.lifetime = 0.05
emitterCeSparkle.yAcceleration = 250
emitterCeSparkle.beginTime = 0.8
emitterCeSparkle.scale = 0.4
emitterCeSparkle.birthRate = 10
emitterCeSparkle.redRange = 0.5
emitterCeSparkle.greenRange = 0.5
emitterCeSparkle.blueRange = 0.5
emitterCeSparkle.color = UIColor.init(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5).cgColor
emitterCePreSpark.emitterCells = [emitterCeSparkle]
emitterCeRocket.emitterCells = [emitterCeFly,emitterCeFirework,emitterCePreSpark]
emitterLa.emitterCells = [emitterCeRocket]
self.view.layer.addSublayer(emitterLa)
CAEmitterLayer参数详解
emitterCells
附着在当前layer上的粒子的数组,每一个元素必须是CAEmitterCell对象
[支持动画] birthRate
每秒钟生成粒子的速率,默认值是1,其作为乘积器影响emitterCells中的对象
[支持动画] lifetime
粒子的生命周期,默认值为1,其作为乘积器影响emitterCells中的对象
[支持动画] emitterPosition emitterZPosition
发射器中心位置,默认值为(0, 0, 0)
[支持动画] emitterSize emitterDepth
发射器尺寸的大小,默认值为(0, 0, 0),根据emitterPosition与emitterZPosition值的不同,会导致部分值失效
[支持动画] velocity
粒子的速率,默认值为1,其作为乘积器影响emitterCells中的对象
[支持动画] scale
粒子的尺寸,默认值为1,其作为乘积器影响emitterCells中的对象
[支持动画] spin
粒子的旋转,默认值为1,其作为乘积器影响emitterCells中的对象
emitterShape
发射器的形状类型,包括以下这几种'point'(默认值),'line','rectangle','circle','cuboid'与'sphere'
emitterMode
发射器模式,包括以下几种'points','outline','surface'与'volume'(默认值)
renderMode
渲染模式
preservesDepth
景深模式开关,默认为NO
emitter cell定义了粒子发射的方向。
alphaRange: 一个粒子的颜色alpha能改变的范围;
alphaSpeed:粒子透明度在生命周期内的改变速度;
birthrate:粒子参数的速度乘数因子;
blueRange:一个粒子的颜色blue 能改变的范围;
blueSpeed: 粒子blue在生命周期内的改变速度;
color:粒子的颜色
contents:是个CGImageRef的对象,既粒子要展现的图片;
contentsRect:应该画在contents里的子rectangle:
emissionLatitude:发射的z轴方向的角度
emissionLongitude:x-y平面的发射方向
emissionRange;周围发射角度
emitterCells:粒子发射的粒子
enabled:粒子是否被渲染
greenrange: 一个粒子的颜色green 能改变的范围;
greenSpeed: 粒子green在生命周期内的改变速度;
lifetime:生命周期
lifetimeRange:生命周期范围
magnificationFilter:不是很清楚好像增加自己的大小
minificatonFilter:减小自己的大小
minificationFilterBias:减小大小的因子
name:粒子的名字
redRange:一个粒子的颜色red 能改变的范围;
redSpeed; 粒子red在生命周期内的改变速度;
scale:缩放比例:
scaleRange:缩放比例范围;
scaleSpeed:缩放比例速度:
spin:子旋转角度
spinrange:子旋转角度范围
style:不是很清楚:
velocity:速度
velocityRange:速度范围
xAcceleration:粒子x方向的加速度分量
yAcceleration:粒子y方向的加速度分量
zAcceleration:粒子z方向的加速度分量
Class Methods
defauleValueForKey: 更具健获得值;
emitterCell:初始化方法
shouldArchiveValueForKey:是否归档莫键值
网友评论