Intereting Posts
Пользовательские методы, которые теперь определяются библиотекой какао получение позиции символа в NSString IOS / xcode: какие методы выполняются по умолчанию Программно-ориентированный раскадровки в appdelegate Сохранять текущий список сообщений пользователя в сеансе с быстрым reloadRowsAtIndexPaths заставляет ячейку мигать или мерцать Alamofire: Тип выражения неоднозначен в .GET Как получить ярлык в ячейках в таблице, чтобы перейти к следующей строке вместо того, чтобы отключить экран? (xcode 8) API с открытым исходным кодом для загрузки видео на YouTube с iOS? потерять соединение сокета io в приложении cordova на ios в режиме ожидания Сохранить редактируемый длинный текст из UITextView Может кто-нибудь объяснить, будет ли мультитач-зум работать для UITextView или UIScrollView Утечка памяти SBJsonParser Изменить цвет UINavigationbar для вкладки «Дополнительно»? Делегат NSFectchedResultController не вызван?

Перемещение узла в SceneKit с помощью касания

Я пытаюсь переместить узел в SceneKit на ощупь. Я использую код здесь: переместите определенный узел в SceneKit, используя touch

Проблема, которую я испытываю, заключается в том, что каждый раз, когда я запускаю panGesture, объект, который я касаюсь, идет в левый угол сцены, чтобы начать движение. Перемещение с этой позиции и освобождение в порядке, просто проблема, что при каждом запуске панорамирования объект сбрасывается с левого угла. Если я уменьшу масштаб, он сбрасывается с угла этого нового уровня масштабирования.

Мой код:

func CGPointToSCNVector3(view: SCNView, depth: Float, point: CGPoint) -> SCNVector3 { let projectedOrigin = view.projectPoint(SCNVector3Make(0, 0, depth)) let locationWithz = SCNVector3Make(Float(point.x), Float(point.y), projectedOrigin.z) return view.unprojectPoint(locationWithz) } func dragObject(sender: UIPanGestureRecognizer){ if(movingNow){ let translation = sender.translationInView(sender.view!) var result : SCNVector3 = CGPointToSCNVector3(objectView, depth: tappedObjectNode.position.z, point: translation) tappedObjectNode.position = result } else{ let hitResults = objectView.hitTest(sender.locationInView(objectView), options: nil) if hitResults.count > 0 { movingNow = true } } if(sender.state == UIGestureRecognizerState.Ended) { } } 

а также

 override func viewDidLoad() { super.viewDidLoad() let scnView = objectView scnView.backgroundColor = UIColor.whiteColor() scnView.autoenablesDefaultLighting = true scnView.allowsCameraControl = true 

я временно отключил функции panning functionsCameraControl перед вызовом dragObject, выполнив следующие действия:

 globalPanRecognizer = UIPanGestureRecognizer(target: self, action:#selector(ViewController.dragObject(_:))) objectView.addGestureRecognizer(globalPanRecognizer) 

Это значения внутри первого вызова CGPointToSCNVector3:

  • начальное значение tappedObjectNode: SCNVector3 (x: 0.100000001, y: 0.100000001, z: 3.0)
  • projectedOrigin: SCNVector3 (x: 261.613159, y: 285.530396, z: 0.949569583) – это ненормально большая
  • значение, возвращаемое CGPointToSCNVector3: SCNVector3 (x: 1.03418088, y: 1.9734658, z: 4.64346933)

Я играл с различными вариантами CGPointToSCNVector3, но не повезло. В чем причина такого поведения? Благодаря,

Решение заключалось в изменении sender.translationInView (sender.view!) На sender.translationInView (self.view!)