【发布时间】:2020-10-20 14:45:58
【问题描述】:
我正在使用 Scenekit,当我点击屏幕时,我正在尝试从循环中更新 UI 上的标签文本属性。我已验证标签已连接到 StoryBoard 中,我可以从 ViewDidLoad 更新标签。我还验证了循环中的文本值是否存在,因为我可以看到它在控制台中打印。手势识别器的完整代码如下,您可以在底部看到我已经尝试过 GCD,但没有成功。任何帮助表示赞赏。
@objc func sceneTapped(recognizer: UITapGestureRecognizer) {
let KTStoKMperSec = 0.0005144444444444
let aircraftSpeed = 480.0 * KTStoKMperSec
let quatSun = simd_quatf(angle: Float(-1.0 / aircraftSpeed * 2 * .pi / 86400.0),
axis: simd_float3(x: 0,
y: 1,
z: 0))
for i in 0...geodesic.count-1 {
SCNTransaction.begin()
let quatPitch = simd_quatf(angle: Float(-1.0/6371.0),
axis: simd_float3(x: 1,
y: 0,
z: 0))
aircraft.position = geodesic[i].unit * 1.05
aircraft.localRotate(by: SCNQuaternion(quatPitch.vector.x, quatPitch.vector.y, quatPitch.vector.z, quatPitch.vector.w))
let SCNQuat = SCNQuaternion(quatSun.vector.x, quatSun.vector.y, quatSun.vector.z, quatSun.vector.w)
termPathnode.rotate(by: SCNQuat, aroundTarget: SCNVector3(x:0, y:1, z:0))
lightNode.rotate(by: SCNQuat, aroundTarget: SCNVector3(x:0, y:1, z:0))
cameraNode.position = aircraft.position.unit*3
SCNTransaction.commit()
//print(String("\(aircraft.position.x)"))
DispatchQueue.main.async {
//self.dataLabel.setNeedsDisplay()
self.dataLabel.text = String("\(aircraft.position.x)")
}
}
}
【问题讨论】:
标签: swiftui label grand-central-dispatch scenekit