Add star background effect

This commit is contained in:
Isaac 2024-08-09 19:38:30 +04:00
parent 03eeb3515c
commit 17408cbb9a

View File

@ -56,11 +56,13 @@ protocol ReactionItemNode: ASDisplayNode {
private let lockedBackgroundImage: UIImage = generateFilledCircleImage(diameter: 16.0, color: .white)!.withRenderingMode(.alwaysTemplate)
private let lockedBadgeIcon: UIImage? = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/PanelBadgeLock"), color: .white)
private final class StarsReactionEffectLayer: SimpleLayer {
private final class StarsButtonEffectLayer: SimpleLayer {
let emitterLayer = CAEmitterLayer()
override init() {
super.init()
//self.backgroundColor = UIColor.lightGray.withAlphaComponent(0.2).cgColor
self.addSublayer(self.emitterLayer)
}
override init(layer: Any) {
@ -71,7 +73,45 @@ private final class StarsReactionEffectLayer: SimpleLayer {
fatalError("init(coder:) has not been implemented")
}
private func setup() {
let color = UIColor(rgb: 0xffbe27)
let emitter = CAEmitterCell()
emitter.name = "emitter"
emitter.contents = UIImage(bundleImageName: "Premium/Stars/Particle")?.cgImage
emitter.birthRate = 25.0
emitter.lifetime = 2.0
emitter.velocity = 12.0
emitter.velocityRange = 3
emitter.scale = 0.1
emitter.scaleRange = 0.08
emitter.alphaRange = 0.1
emitter.emissionRange = .pi * 2.0
emitter.setValue(3.0, forKey: "mass")
emitter.setValue(2.0, forKey: "massRange")
let staticColors: [Any] = [
color.withAlphaComponent(0.0).cgColor,
color.cgColor,
color.cgColor,
color.withAlphaComponent(0.0).cgColor
]
let staticColorBehavior = CAEmitterCell.createEmitterBehavior(type: "colorOverLife")
staticColorBehavior.setValue(staticColors, forKey: "colors")
emitter.setValue([staticColorBehavior], forKey: "emitterBehaviors")
self.emitterLayer.emitterCells = [emitter]
}
func update(size: CGSize) {
if self.emitterLayer.emitterCells == nil {
self.setup()
}
self.emitterLayer.emitterShape = .circle
self.emitterLayer.emitterSize = CGSize(width: size.width * 0.7, height: size.height * 0.7)
self.emitterLayer.emitterMode = .surface
self.emitterLayer.frame = CGRect(origin: .zero, size: size)
self.emitterLayer.emitterPosition = CGPoint(x: size.width / 2.0, y: size.height / 2.0)
}
}
@ -88,7 +128,7 @@ public final class ReactionNode: ASDisplayNode, ReactionItemNode {
let selectionTintView: UIView?
let selectionView: UIView?
private var starsEffectLayer: StarsReactionEffectLayer?
private var starsEffectLayer: StarsButtonEffectLayer?
private var animateInAnimationNode: AnimatedStickerNode?
private var staticAnimationPlaceholderView: UIImageView?
@ -151,7 +191,7 @@ public final class ReactionNode: ASDisplayNode, ReactionItemNode {
super.init()
if case .stars = item.reaction.rawValue {
let starsEffectLayer = StarsReactionEffectLayer()
let starsEffectLayer = StarsButtonEffectLayer()
self.starsEffectLayer = starsEffectLayer
self.layer.addSublayer(starsEffectLayer)
}