gpt4 book ai didi

swift - 将自定义 UIView 添加到 SCNNode 中未正确显示

转载 作者:行者123 更新时间:2023-11-30 10:50:57 25 4
gpt4 key购买 nike

我想将一个带有一个 UILabel 的自定义 UIView 添加到 SCNNode 中(使用 SceneKit 和 ARKit)。

我将 SCNPlane 与包含创建的 UIView 图层的 SCNMaterial 一起使用。然后我初始化新的 SCNNode 并将其添加到场景中。首先,我尝试在界面生成器中创建 UIView,但这不起作用。所以我决定以编程方式创建 UIView。

class InfoPlaneNodeView: UIView {
var elevationLabel: UILabel

override init(frame: CGRect) {
elevationLabel = UILabel(frame: frame)
super.init(frame: frame)
backgroundColor = UIColor.white
layer.cornerRadius = 20

elevationLabel.translatesAutoresizingMaskIntoConstraints = false
elevationLabel.textColor = UIColor.black
elevationLabel.text = "333m"
addSubview(elevationLabel)

elevationLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
elevationLabel.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
}
}

class InfoViewPlaneNode: SCNNode {
init(planeWidth: CGFloat, planeHeight: CGFloat) {
let material = SCNMaterial()
let infoPlaneNodeView = InfoPlaneNodeView(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
material.diffuse.contents = infoPlaneNodeView.layer
material.transparency = 0.7
material.lightingModel = .constant
material.isDoubleSided = true

let plane = SCNPlane(width: planeWidth, height: planeHeight)
plane.materials = [material]
super.init()
self.geometry = plane
self.position = SCNVector3(0, 3, 0)
}
}

当我运行所有代码时,我只看到白色的 UIView,没有 UILabel。我在没有 SceneKit 的情况下尝试了这段代码,一切正常。问题出在哪里?谢谢

https://imgur.com/a/rQmKJX6

最佳答案

有一次我遇到过这个案子。由于 View 不是任何 View Controller 的一部分,因此您必须手动绘制它:

view.setNeedsDisplay()
view.displayIfNeeded()

关于swift - 将自定义 UIView 添加到 SCNNode 中未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54543122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com