Удалить _SCNSnapshotWindow после выхода из представления дополненной реальности - PullRequest
0 голосов
/ 12 февраля 2019

Когда я покидаю свой контроллер представления дополненной реальности, в верхнем левом углу моего экрана все еще существуют объекты _SCNSnapshotWindow, которые не позволяют мне взаимодействовать с любыми объектами под ними, в моем случае это кнопка возврата в главное меню.Кто-нибудь знает, как я могу избавиться от этих объектов?

View UI Hierarchy

1 Ответ

0 голосов
/ 04 марта 2019

У меня была похожая проблема, когда я использовал экземпляр UIView (в моем случае, подкласс) в качестве содержимого рассеянного материала на SCNPlane внутри сцены.

Хотя UIView широко используется (здесь и в других местах в Интернете) для использования в качестве материала, оно заметно отсутствует в официальной документации Apple по содержанию материала

После просмотра официальной документации, приведенной выше, я решил переключиться на документированный (читай: поддерживаемый) метод - в моем случае UIImage - и проблема исчезла.Это не значит, что вы не можете продолжать использовать UIView, и, возможно, это уникально для того, как я это делал, но достаточно просто превратить представление в изображение, прежде чем назначить его в качестве содержимого материала.:

class MyCustomView: UIView {
    func renderAsImage() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { context in
            layer.render(in: context.cgContext)
        }
    }
}

Затем при настройке содержания материала SCNPlane используйте:

if let view = UINib(nibName: "MyCustomView", bundle: nil).instantiate(withOwner: self, options: nil).first as? MyCustomView {
    plane.firstMaterial!.diffuse.contents = view.renderAsImage()
}
...