将具有透明度的UIView(来自xib)添加到SceneKit

时间:2017-11-21 19:42:18

标签: swift uiview scenekit arkit scnmaterial

我正在尝试将一个UIView加载到具有半透明背景的SceneKit中,但是当我降低不透明度时它只会淡化为白色。 我在.xib文件中有一个非常简单的UIView布局,我想加载到SceneKit中。 到目前为止,我可以在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,backgroundColor有0.2不透明度以及整个视图,因为这些都是我尝试的东西,但仍然得到白色背景,其中一些视图的元素在白色的顶部非常淡出。还试过blendMode = .alpha找不到区别。 'self'这里是SCNNode的子类。

有谁知道如何让这个视图的背景淡化为透明,而不是淡化为白色?或者,另一种将视图加载到SceneKit中的方法。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

newMaterial.diffuse.contents = cardView.layer