在SceneKit中播放GIF后,IOS应用程序UI冻结

问题描述 投票:2回答:1

我创建了可检测图像的AR应用,检测到图像后,我想在其顶部播放gif。

我按照本教程检测图像:https://www.raywenderlich.com/6957-building-a-museum-app-with-arkit-2

在VC中,我像这样添加了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后,当我返回上一个/下一个/相同的VC时,我无法点击任何UI元素(按钮等)。

在控制台中,我看到了这个,但没有找到解决方案。 UIImage + gif swift文件中有查看动画。

UIView setAnimationsEnabled从后台线程调用。不支持从UIView的后台线程或子类执行任何操作,这可能会导致意外和隐匿的行为

只需在Device中运行。https://drive.google.com/file/d/1FKHPO6SkdOEZ-w_GFnrU5CeeeMQrNT-h/view?usp=sharing

您只需在设备中运行该项目,然后扫描dinosaur.png图像(添加了ion xcode),您将gif在其顶部播放。一旦返回到firstVC,所有应用程序都将冻结,您将无法在First VC中点击任何按钮,并且也无法再次启动AR场景。我无法弄清楚这个问题,为什么在申请GIF后可以进行检查并让我知道呢?

如果需要任何内容​​,请让我知道。.预先感谢。

ios swift xcode scenekit gif
1个回答
0
投票

Gif在iOS上有点烦人,因此,我使用mp4资源而不是Gif,后者可以直接加载到AVPlayer中。

在您的情况下,我看到捆绑包中有资源,因此您可以将它们转换为mp4并改为使用它。

要在SceneKit中播放视频,可以使用此链接How do I create a looping video material in SceneKit on iOS in Swift 3?

© www.soinside.com 2019 - 2024. All rights reserved.