ARKit Image tracking - добавить жест панорамирования - PullRequest
0 голосов
/ 15 мая 2019

Я разрабатываю приложение arkit с отслеживанием изображений. Когда камера указывает на изображение, появляется мой объект. Я хочу иметь возможность перемещать объект вокруг изображения, поэтому я добавил жест панорамирования, но он не работает. Я пытался переместить объект, но он не двигается.

var selectedObject: String = "model1"

override func viewDidLoad() {
    super.viewDidLoad()
    sceneview.delegate = self
    let  config = ARWorldTrackingConfiguration()

    if let imagesToTrack = ARReferenceImage.referenceImages(inGroupNamed: "marker", bundle: Bundle.main){

        config.detectionImages = imagesToTrack
        config.maximumNumberOfTrackedImages = 1
    }

    sceneview.session.run(config)
    sceneview.autoenablesDefaultLighting = true
    sceneview.automaticallyUpdatesLighting = true
    registerGestureRecognizers()
}

func renderer(_ renderer: SCNSceneRenderer, didAdd newNode: SCNNode, for anchor: ARAnchor) {
    if let imageAnchor = anchor as? ARImageAnchor{
        if (imageAnchor.referenceImage.name == "ar_split"){
            if let airplaneScene = SCNScene(named: "art.scnassets/\(selectedObject).dae"){

                if let airplaneNode = airplaneScene.rootNode.childNodes.first {
                    currentNode = airplaneNode
                    rootNode = newNode
                    rootNode!.addChildNode(airplaneNode)
                }
            }
        }

    }
}
func registerGestureRecognizers(){
    let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(pan))
    self.sceneview.addGestureRecognizer(panGestureRecognizer)

}
@objc func pan(sender: UIPanGestureRecognizer){
    let panLocation = sender.location(in: sceneview)
    let hitTest = sceneview.hitTest(panLocation)

    var node: SCNNode = SCNNode()

    if (!hitTest.isEmpty){
        let result = hitTest.first!
        node = result.node
    }

    if sender.state == .changed {
        let newLocation = sender.location(in: sceneview)
        let newHitTest = sceneview.hitTest(newLocation)
        if (!newHitTest.isEmpty){
            let positionColumn = newHitTest.first!.worldCoordinates
            node.position = SCNVector3(positionColumn.x, node.position.y, positionColumn.z)
        }
    }
}

Что я делаю не так и как я могу добавить жест панорамирования в приложение для отслеживания изображений?

...