내 상위 뷰에는 SceneKit 장면이 포함 된 하위 뷰가 있지만 상위 뷰에서 상태 변경이 발생하면 SceneKit 애니메이션을 재설정하고 모델의 텍스처를 변경하며 모델을 더 크게 만듭니다.
SceneKit 장면이 이러한 방식으로 상태 변경에 의해 영향을받지 않도록하는 방법이 있습니까?
다음은 상위 뷰의 코드입니다.
struct ContentView: View {
@State private var color: Color = .sBlue
var body: some View {
VStack {
Button(action: { self.color = .sOrange }) {
self.color
}
.frame(height: 240)
ModelView()
}
}
}
다음은 SceneKit보기의 코드입니다.
struct ModelView: UIViewRepresentable {
let model = SCNScene(named: "art.scnassets/3D Models/yBotIdle.scn")!
func makeUIView(context: Context) -> SCNView {
model.rootNode.childNode(withName: "yBot", recursively: true)?
.scale = SCNVector3(x: 0.03, y: 0.03, z: 0.03)
let cameraNode = SCNNode()
let camera = SCNCamera()
camera.focalLength = 120
cameraNode.camera = camera
cameraNode.position = SCNVector3(x: 0, y: 2.8, z: 35)
model.rootNode.addChildNode(cameraNode)
let directionalLightNode = SCNNode()
directionalLightNode.light = SCNLight()
directionalLightNode.light?.type = SCNLight.LightType.directional
directionalLightNode.light?.intensity = 1500
directionalLightNode.position = SCNVector3(x: 0, y: 6, z: 10)
directionalLightNode.eulerAngles = SCNVector3(x: -0.4, y: 0, z: 0)
model.rootNode.addChildNode(directionalLightNode)
let modelView = SCNView()
modelView.antialiasingMode = SCNAntialiasingMode.multisampling4X
modelView.backgroundColor = UIColor(ciColor: .clear)
return modelView
}
func updateUIView(_ modelView: SCNView, context: Context) {
modelView.scene = model
}
}
감사!
알아 냈어! SceneKit보기를 사용하는 대신 상위보기에서 사용할 SceneKit보기의 인스턴스를 만들면 문제가 직접 제거됩니다. 왜 그런지 모르겠습니다. 누군가 설명 할 수 있다면 듣고 싶습니다.
struct ContentView: View {
@State private var color: Color = .sBlue
let modelView = ModelView()
var body: some View {
VStack {
Button(action: { self.color = .sOrange }) {
self.color
}
.frame(height: 240)
modelView
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다