Я разрабатываю приложение 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)
}
}
}
Что я делаю не так и как я могу добавить жест панорамирования в приложение для отслеживания изображений?