I am trying to implement uicollection view in arscnview and scroll direction horizontal with user interaction. In collection view cell contains product image and name. is it possible to add collection view arscnview.
here is the code i treid so far:
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)
}