如何在 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?
如何在 UIScrollView iOS/Swift 中的控件页面之间水平滚动
ios - 如何使用ios swift中的自动布局以编程方式将两个标签并排放置在中心位置?