IOS пользовательский интерфейс приложения зависает после воспроизведения GIF в SceneKit - PullRequest
1 голос
/ 02 марта 2020

Я создал приложение AR, которое обнаруживает изображение, при обнаружении изображения я хочу воспроизвести gif поверх него.

Я следовал этому руководству для обнаружения изображения: https://www.raywenderlich.com/6957-building-a-museum-app-with-arkit-2

В V C я добавил Imageview следующим образом:

  var imageView = GIFImageView(frame: CGRect(x: 0, y: 0, width: 600, height: 600))

Вот мой код в узле ARSCNViewDelegate didAdd для метода.

  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.main.async { self.instructionLabel.isHidden = true }
if let imageAnchor = anchor as? ARImageAnchor {
  //      handleFoundImage(imageAnchor, node)

  let size = imageAnchor.referenceImage.physicalSize

  DispatchQueue.main.async(){ // If we remove this we are getting UIview setAnimation is being call from background thread error is coming.
    self.imageView.animate(withGIFNamed: "tenor.gif") // I actually access gif from Document folder i.e Data format
  }
  let imgMaterial = SCNMaterial()

  imgMaterial.diffuse.contents = imageView

  let imgPlane = SCNPlane(width: size.width, height: size.height)

  imgPlane.materials = [imgMaterial]

  let imgNode = SCNNode(geometry: imgPlane)
  imgNode.eulerAngles.x = -.pi / 2

  node.addChildNode(imgNode)
  node.opacity = 1

}

}

После воспроизведения gif, когда я go возвращаюсь к своему предыдущему / следующему / тому же V C, я не могу нажать на какие-либо элементы пользовательского интерфейса (кнопки et * 1035) *).

В консоли я вижу это, но я не нашел решения для этого. анимация просмотра есть в файле UIImage + gif swift.

UIView setAnimationsEnabled вызывается из фонового потока. Выполнение любой операции из фонового потока в UIView или подклассе не поддерживается и может привести к неожиданному и коварному поведению

Просто запустите это в Device. https://drive.google.com/file/d/1FKHPO6SkdOEZ-w_GFnrU5CeeeMQrNT-h/view?usp=sharing

Вы просто запускаете этот проект на устройстве и сканируете изображение dinosaur.png (добавлен ионный код), и вы играете поверх него. Однажды, если вы go вернулись к первому V C, это все приложение заблокировано, вы не можете нажать ни на одну кнопку в First V C, а также вы не можете снова запустить сцену AR. Я не могу понять эту проблему, почему это происходит после фальсификации GIF. Можете ли вы попросить проверить и сообщить мне.

Если что-то понадобится, пожалуйста, дайте мне знать .. Заранее спасибо.

1 Ответ

0 голосов
/ 02 марта 2020

Gif немного раздражает, когда обрабатывает iOS, и поэтому я использую ресурсы mp4 вместо Gif, которые можно напрямую загрузить в AVPlayer.

В вашем случае я вижу, что вы ресурсы в Bundle, так что вы можете преобразовать их в mp4 и использовать вместо этого.

Для воспроизведения видео в SceneKit вы можете использовать эту ссылку Как создать зацикленный видеоматериал в SceneKit на iOS в Swift 3? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...