粒子动画效果实现和Swift面向协议开发

粒子动画效果实现是通过CALayer的子类,CAEmitterLayer实现。

实现粒子动画效果分以下几个步骤:

// 1.创建发射器

let layer = CAEmitterLayer()

// 2.发射器位置()

layer.position = point

//3.开启3D效果

layer.preservesDepth = true

// 4.创建粒子, 并且设置粒子相关的属性

var cells = [CAEmitterCell]()

for i in 0..<10{//10是图片的数量,你要显示几种粒子就是几

// 4.1 创建例子Cell

let cell = CAEmitterCell()

//4.2 粒子的速率

cell.velocity = 150

cell.velocityRange = 100

// 4.3 设置例子的大小

cell.scale = 0.7

cell.scaleRange = 0.3

//4.4 粒子的方向

//emissionLongitude设置垂直方向,emissionLatitude设置水平方向 粒子默认是水平向右即0度角方向

cell.emissionLongitude = CGFloat(-Double.pi / 2)//垂直往上方向

cell.emissionRange = CGFloat(Double.pi / 2 / 6)//30度角度

//4.5 设置粒子的存活时间

cell.lifetime = 3.0

cell.lifetimeRange = 1.5

//4.6 设置粒子的旋转

cell.spin = CGFloat(-Double.pi / 2)

cell.spinRange = CGFloat(Double.pi / 2 / 2)

//4.7 设置粒子每秒弹出的个数

cell.birthRate = 3

//4.8 粒子的图片

cell.contents = UIImage(named: "good\(i)_30x30")?.cgImage

cells.append(cell)

}

// 5.将粒子设置到发射器中

layer.emitterCells = cells

// 6.将发射器的layer添加到父layer中

view.layer.addSublayer(layer)

根据需要可以多设置几个发射器实现相应的效果


//面向协议开发

swift中,protocol 可以被类,枚举,结构体等任何东西遵守。将某一功能实现写在一个protocol的extension里面,遵守这个协议就具备这个功能。像一个零部件,拿过来就能用。

上面,粒子动画效果实现,用面向协议开发的思想实现如下

protocol Emitterable{

}

extension Emitterable where Self : UIViewController{//where 过滤遵守协议的对象,此处只有UIviewController能遵守协议

func startEmitting(_ point : CGPoint){

    //将上面粒子动画实现代码copy至此即可

}

func stopEmitting(){

view.layer.sublayers?.filter({$0.isKind(of: CAEmitterLayer.self)}).first?.removeFromSuperlayer()}

}

第一次写,记录自己学的东西,不到之处,请多指教,谢谢。

你可能感兴趣的:(粒子动画效果实现和Swift面向协议开发)