SceneView хит-сбои на iOS 11.4, работает на iOS 12+ - PullRequest
0 голосов
/ 21 ноября 2018

У меня происходит сбой функции m_sceneView.hittest (...) на iOS 11.4.Тот же код работает на iOS 12+!

Код выглядит следующим образом:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
  guard m_sceneView.session.currentFrame != nil else {return}

  DispatchQueue.main.async(execute: {
    if let camera = self.m_sceneView.session.currentFrame?.camera, 
                    case .normal = camera.trackingState {
      let results = self.m_sceneView.hitTest(self.m_sceneView.center, 
                    options: [SCNHitTestOption.searchMode: 2])
      guard let result = results.first else {
        print("No Hittest results received")
        return
      }

      // do something with the hittest result !
      // ...
      // ...
    }
  })
}

Я получаю сбой "EXC_BAD_ACCESS (code = 1, address = 0x0)" в строке проверки попадания.

  • Я проверил, что self.m_sceneView.center содержит допустимые значения
  • Я проверяю состояние сеанса (как вы видите в коде)
  • проблема воспроизводима.
  • Представление, над которым я работаю, представляет собой ARSCNView

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 05 января 2019

Я получил решение от Apple, ребята.На самом деле это ошибка в API SceneKit, которая была решена в IOS 12, но для версий более ранних, чем 12, существует обходной путь:

let options: [SCNHitTestOption: Any] = [SCNHitTestOption.boundingBoxOnly: true]
let hitResults = scnView.hitTest(p, options: options)
...