【发布时间】:2019-09-15 22:11:17
【问题描述】:
我正在尝试更新 UIViewRepresentable 中 SKEmitterNode 的颜色。色调值是从父 View 上的状态传入的,当父状态的色调值更新时,发射器颜色也应该更新。
它最初显示,尽管它在第一次调用 updateUIView 时更新,但它不会响应任何后续调用,即使每次调用该函数时都会使用 hue 的新值。
有人知道为什么发射器不会更新吗?我正处于脱发阶段......
import SwiftUI
import UIKit
import SpriteKit
struct EmitterView: UIViewRepresentable {
private let view = SKView()
let scene = SKScene(fileNamed: "myScene")!
var emitter: SKEmitterNode = SKEmitterNode()
var hue: Double
func makeUIView(context: UIViewRepresentableContext<EmitterView>) -> SKView {
// Lets make it manually
emitter.particleTexture = SKTexture(imageNamed: "spark")
emitter.particleBirthRate = 80
emitter.particleLifetime = 2.5
emitter.particlePositionRange = CGVector(dx: 200, dy: 150)
emitter.particleScale = 0.2
emitter.particleScaleSpeed = 0.45
emitter.particleColor = SKColor.blue
emitter.particleColorBlendFactor = 1.0
scene.addChild(emitter)
view.presentScene(scene)
return view
}
func updateUIView(_ uiView: SKView, context: UIViewRepresentableContext<EmitterView>) {
let color: SKColor = SKColor(
hue: CGFloat(hue),
saturation: 1.0,
brightness: 1.0,
alpha: 1.0
)
print("Hue is now", hue)
emitter.resetSimulation()
emitter.particleColor = color
}
}
struct EmitterView_Previews: PreviewProvider {
static var previews: some View {
EmitterView(hue: 0.5)
}
}
【问题讨论】:
标签: ios sprite-kit swiftui skemitternode uiviewrepresentable