You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求iOS Swift实现按钮点击粒子效果的代码示例(参考Leonids)

当然有啦!在iOS上用Swift实现你展示的这种点击触发的彩色粒子爆发效果,用原生的SpriteKit就能轻松搞定,不需要额外依赖第三方库(当然也有类似Leonids的第三方库可选,但原生方案已经足够灵活好用)。下面给你一个完整的代码示例,一步一步实现点击按钮触发粒子效果:

iOS Swift 实现点击触发粒子效果示例

核心思路

我们用SpriteKit的SKEmitterNode来创建粒子效果,它可以灵活控制粒子的发射角度、速度、颜色、生命周期等参数,完美匹配你展示的效果。

完整代码实现

import UIKit
import SpriteKit

class ParticleDemoViewController: UIViewController {
    
    private var skView: SKView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupSpriteKitView()
        setupTriggerButton()
    }
    
    // 初始化SpriteKit视图,用来承载粒子效果
    private func setupSpriteKitView() {
        skView = SKView(frame: view.bounds)
        skView.backgroundColor = .white
        view.addSubview(skView)
        
        let scene = SKScene(size: skView.bounds.size)
        scene.backgroundColor = .white
        skView.presentScene(scene)
    }
    
    // 创建触发按钮
    private func setupTriggerButton() {
        let triggerBtn = UIButton(type: .system)
        triggerBtn.setTitle("点击触发粒子效果", for: .normal)
        triggerBtn.titleLabel?.font = .systemFont(ofSize: 18, weight: .bold)
        triggerBtn.addTarget(self, action: #selector(burstParticles), for: .touchUpInside)
        triggerBtn.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(triggerBtn)
        
        // 按钮居中布局
        NSLayoutConstraint.activate([
            triggerBtn.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            triggerBtn.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }
    
    // 触发粒子爆发的核心方法
    @objc private func burstParticles() {
        guard let currentScene = skView.scene else { return }
        
        // 创建粒子发射器节点
        let emitter = SKEmitterNode()
        
        // 设置粒子纹理:这里用系统的圆形填充图标,你也可以换成自定义的粒子图片
        guard let particleImage = UIImage(systemName: "circle.fill") else { return }
        emitter.particleTexture = SKTexture(image: particleImage)
        
        // 设置粒子彩色序列,模拟你展示的多色粒子
        emitter.particleColorSequence = SKKeyframeSequence(keyValues: [
            UIColor.systemRed,
            UIColor.systemGreen,
            UIColor.systemBlue,
            UIColor.systemYellow
        ], times: [0, 0.25, 0.5, 0.75])
        
        // 粒子发射范围:从按钮周围小区域内发射
        emitter.particlePositionRange = CGVector(dx: 40, dy: 40)
        // 360度全方位发射粒子
        emitter.emissionAngle = .pi * 2
        emitter.emissionAngleRange = .pi * 2
        
        // 粒子运动参数
        emitter.particleSpeed = 160
        emitter.particleSpeedRange = 60 // 粒子速度有差异,更自然
        emitter.particleLifetime = 1.4 // 粒子存活时间
        emitter.particleLifetimeRange = 0.6
        
        // 粒子大小变化:从初始大小逐渐缩小
        emitter.particleScale = 0.2
        emitter.particleScaleRange = 0.1
        emitter.particleScaleSpeed = -0.2
        
        // 粒子透明度变化:逐渐消失
        emitter.particleAlpha = 1.0
        emitter.particleAlphaSpeed = -0.7
        
        // 将发射器位置设置为按钮的中心
        if let btn = view.subviews.first(where: { $0 is UIButton }) {
            emitter.position = skView.convert(btn.center, from: view)
        }
        
        // 添加到场景,粒子结束后自动移除节点
        currentScene.addChild(emitter)
        emitter.run(.wait(forDuration: emitter.particleLifetime + 0.5)) {
            emitter.removeFromParent()
        }
    }
}

参数调整建议

如果你想更贴近你展示的gif效果,可以调整这些参数:

  • particleTexture:换成更接近原效果的粒子图片(比如带点渐变的小圆形)
  • particleSpeed:调小一点可以让粒子运动更缓慢
  • particleLifetime:延长时间让粒子停留更久
  • particleScale:调整初始粒子大小

另外,如果你偏好第三方库,也可以找类似Leonids的iOS粒子库,但原生SpriteKit的可控性更强,不需要额外引入依赖。

内容的提问来源于stack exchange,提问作者Seize Duh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:49:41