6

我正在尝试将 UIView 加载到具有半透明背景的 SceneKit 中,但目前,当我降低不透明度时,它只会淡化为白色。我在要加载到 SceneKit 的 .xib 文件中有一个非常简单的 UIView 布局。到目前为止,我可以在 SCNMaterial 中显示 UIView,更改视图内的任何文本字段、图像等都没有问题。但是,我不能让它具有透明度。如果我更改视图的 alpha,它只会淡化为白色。

大部分代码如下:

if let cardView = Bundle.main.loadNibNamed("OverlayCard", owner: self, options: nil)?.first as? OverlayCard {
  cardView.backgroundColor = UIColor(displayP3Red: 1.0, green: 0.4, blue: 0.9, alpha: 0.2)
  let newplane = SCNPlane()
  let newMaterial = SCNMaterial()
  cardView.alpha = 0.2
  cardView.isOpaque = false
  newMaterial.diffuse.contents = cardView
  newMaterial.blendMode = .add
  newplane.materials = [newMaterial]
  let viewNode = SCNNode(geometry: newplane)
  self.addChildNode(viewNode)
}

我留下了各种各样的东西,比如分配blendMode、0.2不透明度的backgroundColor以及整个视图,因为这些都是我尝试过的东西,但仍然得到一个白色背景,其中一些视图元素在白色的顶部非常褪色出去。也试过 blendMode = .alpha 发现没有区别。这里的“self”是 SCNNode 的子类。

有谁知道我怎样才能使这个视图的背景淡化为透明,而不是淡化为白色?或者,将视图加载到 SceneKit 的另一种方法。

4

1 回答 1

1

尝试将视图的图层设置为diffuse.contents 而不是视图本身。

newMaterial.diffuse.contents = cardView.layer
于 2018-07-31T07:01:29.880 回答