Приложение перестает реагировать на прикосновения после подключения контроллера представления, содержащего вид сцены ARKit - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть контроллер навигации, содержащий контроллер корневого представления, который содержит одну кнопку UIB.Нажатие на кнопку помещает другой контроллер представления в стек.Этот второй контроллер представления содержит ARKit sceneView (ARSCNView).Внутри сцены я добавляю узел, используя SCNPlane, и устанавливаю диффузное содержимое материала плоскости, чтобы использовать вид, поддерживаемый контроллером вида, следующим образом:

import UIKit
import SceneKit
import ARKit

class SceneViewController: UIViewController {

    @IBOutlet weak var sceneView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setupScene()
    }

    func setupScene() {
        sceneView.scene = SCNScene()

        let configuration = ARWorldTrackingConfiguration()
        sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])

        // add a small plane at the origin...
        let plane = SCNPlane(width: 0.1, height: 0.1)

        // create a view controller, and add use its view as the plane's material contents...
        let vc = UIViewController()
        vc.view.backgroundColor = UIColor.red
        plane.firstMaterial?.diffuse.contents = vc.view

        let node = SCNNode(geometry: plane)

        sceneView.scene.rootNode.addChildNode(node)
    }
}

Когда я выталкиваю этот контроллер вида (используя либокнопка «Назад» или жест панорамирования), контроллер корневого представления перестает реагировать на события касания.

Поворот устройства в горизонтальное положение, а затем возврат в портрет, кажется, освобождает все, что вызывает такое поведение

Я попытался переопределить touchCegan на контроллере корневого представления, но он не срабатывает.

Я попытался заставить окно стать первым респондентом.

Я гарантировалчто SceneViewController уничтожается и что сеанс sceneView после запуска контроллера представления еще не запущен.

Эта проблема не возникает при использовании UIView или UIImage, сгенерированных из контроллера представления содержимого.представление, но это будет означать, что с ним нельзя взаимодействовать.

Вот ссылка на СэмПле проект.Его необходимо запустить на устройстве с поддержкой ARKit: https://github.com/duncanlowrie/vc-node-test

1 Ответ

0 голосов
/ 09 декабря 2018

Я столкнулся с той же проблемой.Оказывается, что если вы назначите SKScene для plane.firstMaterial? .Diffuse.contents, это поведение исчезнет, ​​но вам нужен UIView (как и я) по очевидным причинам.

Кроме того, я думаю, что толькооколо двух третей экрана перестает отвечать на запросы.Я попробовал это на iPhone 7 и iPhone XS, и если вы попытаетесь взаимодействовать с тем, что находится в нижней трети экрана, оно должно работать.Ужасная ошибка.

Попытка также восстановить экземпляр rootViewController окна AppDelegate с новой точкой входа из раскадровки: без радости.

...