如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图

Posted

技术标签:

【中文标题】如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图【英文标题】:How to show uicollection view in ARSCNView in iOS swift 【发布时间】:2018-09-24 04:20:44 【问题描述】:

我正在尝试在 arscnview 中实现 uicollection 视图,并通过用户交互实现水平滚动方向。 在集合视图单元格中包含产品图像和名称。是否可以添加集合视图arscnview。

我得到的结果:

这是我目前使用的代码:

     let newCollection: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    let collection = UICollectionView(frame: CGRect(x: 0, y: 0, width: 200, height: 100), collectionViewLayout: layout)
    layout.scrollDirection = .horizontal
    collection.backgroundColor = UIColor.gray
    collection.translatesAutoresizingMaskIntoConstraints = false
    collection.isScrollEnabled = true
    return collection
()

  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) 

    DispatchQueue.main.async 
        guard let imageAnchor = anchor as? ARImageAnchor,
            let imageName = imageAnchor.referenceImage.name else  return 

   self.newCollection.delegate = self
            self.newCollection.dataSource = self
            self.newCollection.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: self.cellId)
            self.view.addSubview(self.newCollection)
            self.setupCollection()

            let collectionPlane = SCNPlane(width: 0.2, height: 0.1)
            collectionPlane.firstMaterial?.diffuse.contents = self.newCollection

            let collectionNode = SCNNode(geometry: collectionPlane)
            collectionNode.eulerAngles.x = -.pi/2
            collectionNode.runAction(SCNAction.moveBy(x: 0, y: 0, z: 0, duration: 0))

            node.addChildNode(collectionNode)


                   self.sceneView.scene.rootNode.addChildNode(node)


   

      //collection view

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

    return 7


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

    let cell = newCollection.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MyCollectionViewCell
    cell.backgroundColor = .blue
    return cell


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

    return CGSize(width: 100, height: 50)


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 

    return UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)

预期输出:

【问题讨论】:

【参考方案1】:

将材质的diffuse的contents属性设置为collectionView的view属性

let material = SCNMaterial()
material.diffuse.contents = yourCollectionView.view

【讨论】:

以上是关于如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift iOS 中的 UIAlertcontroller 中显示 UITableview?

如何在ios,swift中更新子控制器中的数据

如何在 UIScrollView iOS/Swift 中的控件页面之间水平滚动

ios - 如何使用ios swift中的自动布局以编程方式将两个标签并排放置在中心位置?

如何在SWIFT3 XCODE 8.2中的IOS应用程序中的Snackbar的操作中显示特定视图

如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图