Particle Animation
CAEmitterLayer
과 CAEmitterCell
로 particle이 뷰에 뿌려지는 효과를 줄 수 있다.
CAEmitterLayer
A layer that emits, animates, and renders a particle system.
particle system을 방출하고 움직이게 하고 렌더링하는 layer이다.
The particles, defined by instances of CAEmitterCell, are drawn above the layer’s background color and border.
위에서 말하는 particle은 CAEmtterCell로 layer위에 animate 할 수 있는 cell이 뿌려진다.
구현
private let emitterLayer = CAEmitterLayer()
private func setUpEmitterLayer() {
emitterLayer.emitterCells = [emojiEmiterCell]
}
이렇게 layer를 생성하고 그 위에 뿌려질 cell을 지정한다. 여기서 emojiEmiterCell은 아래와 같다.
private var emojiEmiterCell: CAEmitterCell {
let cell = CAEmitterCell()
cell.contents = UIImage(named: "Particle")?.cgImage
cell.lifetime = 3
cell.birthRate = 50
cell.scale = 0.15
cell.scaleRange = 0.05
cell.spin = 5
cell.spinRange = 10
cell.emissionRange = CGFloat.pi * 2
cell.velocity = 700
cell.velocityRange = 50
cell.yAcceleration = 1200
return cell
}
contents
layer 안에서 제공될 컨텐츠를 말한다. 해당 property를 CGImage
로 설정해서 이미지를 컨텐츠로 표시할 수 있다.
lifetime
cell의 수명으로 초 단위로 뷰에 보인다. 기본값은 0.0으로 셀의 수명은 지정된 범위에 따라 달라진다.
birthRate
1초당 cell 을 몇개 방출하는지 설정하는 것으로 기본값은 0.0이다. 만약 n으로 설정을 하면 1초에 걸쳐서 n개가 보이는 것을 말한다.
scale
셀에 적용되는 scale factor를 지정하고 해당 속성의 기본값은 1.0이다. 따라서 0.1을 설정하면 셀의 크기가 원래의 1/10이 된다. scaleRange 설정을 통해 해당 값을 지정된 범위 내에서 랜덤으로 달라지게 할 수 있다. 또한 scaleSpeed 속성에 따라 변경 속도가 결정된다.
scaleRange
변경 가능한 scale 의 범위를 지정해서 셀마다 크기를 다르게 할 수 있고 기본 값은 0.0이다.
spin
셀이 얼마나 빠른 속도로 회전할 것인가를 결정하는 값이다. 기본 값은 0.0으로, 이렇게 지정하면 회전 효과가 적용되지 않는다.
spinRange
셀의 spin 은 spinRange로 지정된 범위에 따라 랜덤 값만큼 달라집니다.
emissionRange
cell 이 방출되는 각도를 뜻한다. 기본 값은 0.0 이기 때문에, 이렇게 설정하면 한 방향으로만 방출된다. 만약 2 * CGFloat.pi 로 설정한다면, 이는 360도를 의미하므로 cell이 모든 방향으로 방출 된다.
velocity
cell의 속도를 의미한다. 셀의 속도는 velocityRange 값으로 지정된 범위에 따라 달라진다. 수치가 높을 수록 더 빠르게, 더 멀리 방출되는 효과를 가진다. (yAcceleration의 영향을 받는다.)
velocityRange
cell 의 velocity가 달라질 수 있는 범위를 뜻한다. 만약 기본 velocity가 700이고, velocityRange가 50 이면 각 particle은 650–750 사이의 velocity 값을 갖게 된다.
yAcceleration
cell에 적용되는 가속도 벡터의 y값이다.(= 중력 효과)
양수면 중력이 적용되는 것처럼 보이고, 음수면 중력이 없어져서 날아가는 것 처럼 보인다. 기본 값은 0.0으로 velocity 와 yAcceleration의 조합이 cell의 distance 를 결정한다.
예를 들어서 아래의 코드와 같이 360도로 cell이 방출되는 경우,
cell.emissionRange = CGFloat.pi * 2
cell.velocity = 100
만약 여기에 cell.yAcceleration = 200 를 추가한다면 cell 이 위로 올라가려다가 중력의 영향을 받아 다시 내려오게 된다.
참고자료
https://medium.com/@peteliev/what-do-you-know-about-caemitterlayer-368378d45c2e
Author And Source
이 문제에 관하여(Particle Animation), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pcsoyeon/Particle-Animation저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)