【发布时间】:2020-04-07 14:34:53
【问题描述】:
我在 SceneKit 的 SCNView 中有一个 SCNCylinder。我的目标是将圆柱体在不同的旋转轴上分别旋转 90° 和 180°。我正在使用 SwiftUI 输入要旋转的角度。我已经制作了这个达到同样效果的游乐场。但我遇到错误:“运行此游乐场时遇到问题。请检查您的代码是否有错误。”不知道为什么我会收到这个错误。我相信我已经以编程方式正确地完成了所有事情。
这是我的代码:
import SwiftUI
import SceneKit
import PlaygroundSupport
struct ContentView: View {
@State var rotationAngle: Angle = .zero
@State var rotationAngle2: Angle = .zero
var body: some View {
VStack{
Text("180°").onTapGesture {
self.rotationAngle = .degrees(180)
self.rotationAngle2 = .degrees(0)
}
Divider()
Text("90°").onTapGesture {
self.rotationAngle = .degrees(0)
self.rotationAngle2 = .degrees(90)
}
SceneKitView(radius: 0.02, height: 2, angle: $rotationAngle, angle2: $rotationAngle2)
.position(x: 225.0, y: 175)
.frame(width: 300, height: 300, alignment: .center)
}
}
}
struct SceneKitView: UIViewRepresentable {
@Binding var angle: Angle
@Binding var angle2 : Angle
let cylindernode: SCNNode
init(radius: CGFloat, height: CGFloat, angle: Binding<Angle>, angle2: Binding<Angle>) {
let cylinder = SCNCylinder(radius: radius, height: height)
cylinder.firstMaterial?.diffuse.contents = UIColor.green
self.cylindernode = SCNNode(geometry: cylinder)
self.cylindernode.position = SCNVector3(0, 0, 0)
cylindernode.pivot = SCNMatrix4MakeTranslation(0, -1, 0)
self._angle = angle
self._angle2 = angle2
}
func makeUIView(context: UIViewRepresentableContext<SceneKitView>) -> SCNView {
let sceneView = SCNView()
sceneView.scene = SCNScene()
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.scene?.rootNode.addChildNode(cylindernode)
return sceneView
}
func updateUIView(_ sceneView: SCNView, context: UIViewRepresentableContext<SceneKitView>) {
let rotation = SCNAction.rotate(by: CGFloat(angle.radians), around: SCNVector3(1, 0, 0), duration: 3)
let rotation2 = SCNAction.rotate(by: CGFloat(angle2.radians), around: SCNVector3(0, 0, 1), duration: 3)
cylindernode.runAction(rotation)
cylindernode.runAction(rotation2)
}
}
PlaygroundPage.current.setLiveView(ContentView())
【问题讨论】:
标签: ios swift 3d swiftui scenekit