У меня сбой функции 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
Chris 21 Ноя 2018 в 13:56

1 ответ

Лучший ответ

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

let options: [SCNHitTestOption: Any] = [SCNHitTestOption.boundingBoxOnly: true]
let hitResults = scnView.hitTest(p, options: options)
1
Victor Alonso Barberan 4 Янв 2019 в 23:20