iOS-ライブパーティクル効果
転載して出典を明記する:http://blog.csdn.net/qxuewei/article/details/53942647
粒子の効果の応用シーン:アナウンサーの部屋の右下の角の粒子のアニメーションの雪の花/雨が降る/花火などの効果QQ誕生日の楽しみのひと山の表情の鼓動
一般的な実装方法:
単純なパーティクルエフェクトを実現できる:
通常、生放送などのソフトウェアでは、パーティクル効果が単独のパーティクルスタイルのみであることはない.そのため、複数の粒子スタイルの実装を定義する必要がある.プロトコル向けのアイデアを利用してParticleable類をパッケージする.このプロトコルを継承するコントローラは、パーティクル効果の機能を備えることができる.コアコード:
実装効果
完全なプロジェクトリンク:https://github.com/qxuewei/XWCSDNDemos中XWParticleDemo-パーティクルエフェクト
粒子の効果の応用シーン:アナウンサーの部屋の右下の角の粒子のアニメーションの雪の花/雨が降る/花火などの効果QQ誕生日の楽しみのひと山の表情の鼓動
一般的な実装方法:
//
func addParticleEffect() {
// 1.
let emitter = CAEmitterLayer()
// 2.
emitter.emitterPosition = CGPoint(x: UIScreen.main.bounds.width * 0.5, y: -20)
// 3.
emitter.preservesDepth = true
// 4. Cell( )
// 4.0.
let cell = CAEmitterCell()
// 4.1.
cell.birthRate = 20
// 4.2.
cell.lifetime = 5
cell.lifetimeRange = 2.5
// 4.3.
cell.scale = 0.7
cell.scaleRange = 0.3
// 4.4.
cell.emissionLongitude = CGFloat(M_PI_2)
cell.emissionRange = CGFloat(M_PI_4)
// 4.5.
cell.velocity = 150
cell.velocityRange = 50
// 4.6.
cell.spin = CGFloat(M_PI_2)
// 4.7.
cell.contents = UIImage(named: "good2_30x30")?.cgImage
// 5.
emitter.emitterCells = [cell]
view.layer.addSublayer(emitter)
}
単純なパーティクルエフェクトを実現できる:
通常、生放送などのソフトウェアでは、パーティクル効果が単独のパーティクルスタイルのみであることはない.そのため、複数の粒子スタイルの実装を定義する必要がある.プロトコル向けのアイデアを利用してParticleable類をパッケージする.このプロトコルを継承するコントローラは、パーティクル効果の機能を備えることができる.コアコード:
import Foundation
import UIKit
protocol Particleable {
// , ! - OC
// func addParticleEffectTest(_ view : UIView)
}
extension Particleable where Self : UIViewController {
func addParticleEffect(_ point : CGPoint = CGPoint(x: UIScreen.main.bounds.width * 0.85, y: UIScreen.main.bounds.height - 20) ) {
// 1.
let emitter = CAEmitterLayer()
// 2.
emitter.emitterPosition = point
// 3.
emitter.preservesDepth = true
var cells = [CAEmitterCell]()
for i in 0..<10 {
// 4. Cell( )
// 4.0.
let cell = CAEmitterCell()
// 4.1.
cell.birthRate = Float(arc4random_uniform(4)) + 3
// 4.2.
cell.lifetime = 5
cell.lifetimeRange = 2.5
// 4.3.
cell.scale = 0.7
cell.scaleRange = 0.3
// 4.4.
cell.emissionLongitude = CGFloat(-M_PI_2)
cell.emissionRange = CGFloat(M_PI_4 * 0.6)
// 4.5.
cell.velocity = 100
cell.velocityRange = 50
// 4.6.
cell.spin = CGFloat(M_PI_2)
// 4.7.
cell.contents = UIImage(named: "good\(i)_30x30")?.cgImage
cells.append(cell)
}
// 5.
emitter.emitterCells = cells
view.layer.addSublayer(emitter)
}
func removeParticleEffect() {
// 1:
// for layer in view.layer.sublayers! {
// if layer.isKind(of: CAEmitterLayer.self) {
// layer.removeFromSuperlayer()
// }
// }
// 2:
view.layer.sublayers?.filter({ $0.isKind(of: CAEmitterLayer.self)}).last?.removeFromSuperlayer()
}
}
実装効果
完全なプロジェクトリンク:https://github.com/qxuewei/XWCSDNDemos中XWParticleDemo-パーティクルエフェクト