SCNAction 完成处理程序等待手势执行

2023-12-10

我有一个动画SCNNodes由按钮触发。随后按下该按钮,动画就会反转。前进动画总是工作正常,但后退动画有时会挂起。也就是说,它将播放完成处理程序之前的部分,然后冻结。但是,当我应用三个手势(平移、平移、缩放)中的任何一个时,它会取消挂起并完成处理程序部分。相关代码:

            else if buttonToggle_1 == true {  buttonToggle_1 = false
                let moveWaterBack = SCNAction.moveTo(homePosition_2, duration: 1)
                let moveValineBack = SCNAction.moveTo(awayPosition_1, duration: 1)

                atomsNode_3.hidden = false
                bondsNode_3.hidden = false

                hideTransients(true)

                atomsNode_3.runAction(moveWaterBack)
                bondsNode_3.runAction(moveWaterBack,
                    completionHandler: {
                        self.atomsNode_2.runAction(moveValineBack) ;
                        self.bondsNode_2.runAction(moveValineBack) ;
                        self.atomsNode_3.removeFromParentNode() ;
                        self.bondsNode_3.removeFromParentNode() ;
                        hideTransients(false)
                    })
            }

The hideTransients())call 取消隐藏五个节点,通过名称访问它们。有时完成会挂起,有时不会。但是,如果它挂在保留在同一页面上的特定会话中,则它将在后续按钮切换时继续挂起。我还没弄清楚其中的因果关系。我已经改变了removeFromParentNode()打电话给hidden = true目前这正在发挥作用,但让我不敢依赖。

这里究竟会发生什么?

编辑1:虽然它一直工作得相当一致,但我使用后面提到的代码已经看到几次挂起(很多次),所以这并不严格是由于removeFromParentNode() calls.


调用SCNNode.removeFromParentNode()在我看来,一个动作似乎很可疑。我还看到过另一种情况,这似乎导致了不稳定的行为,尽管没有文档表明您不应该这样做。

我认为存在SCNAction.removeFromParentNode()是一个相当大的提示,调用该操作比直接操作节点树更好。

Using SCNAction.group() and SCNAction.sequence()会让你的代码更简单一些。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SCNAction 完成处理程序等待手势执行 的相关文章

  • 在 SceneKit 中模拟折射

    我正在尝试为一个项目创建一个 ios 9 应用程序 它将使用这些特殊的理论镜头 称为 一个名为 TIM 的光线追踪程序已经从头开始编写 用于模拟这些镜头等 但简单地将其移植到 ios 是不可行的 我通过搜索网站得到的理解 即this htt
  • ARKit可以显示WKWebview吗?

    尝试用 ARKit 来显示 WKWebView 但我得到的只是一个显示背景但没有前景的页面 不过页面可以滚动 我附上了苹果网页的截图 这是代码 DispatchQueue main async let webView WKWebView f
  • 通过连接 iOS 中的表从 Firebase 获取数据

    我正在尝试从两个不同的 Firebase 表中获取数据 这是表的结构 Post 1 pImages i1 true i2 true 2 pImages i3 true Images i1 iUrl pId 1 i2 iUrl pId 1 i
  • Xcode 6.1 Swift 问题 - 'init()' 不可用:由导入 -[NSObject init] 取代

    我刚刚将 Xcode 升级到 6 1 现在收到一个奇怪的编译错误 init 不可用 由导入 NSObject init 取代 我正在对 SCNNode 进行子类化 并且可以选择引用我定义的相同类型的其他类 IE import UIKit i
  • ARKit 人物遮挡样本是如何完成的?

    这可能是一个晦涩的问题 但我在网上看到了很多非常酷的示例 展示了人们如何使用 ARKit 3 中新的 ARKit 人物遮挡技术来有效地将人物与背景 分离 并对 人物 应用某种过滤 人 见 在查看苹果提供的源代码和文档时 我发现我可以检索se
  • ARKit:再现Project Point功能

    我正在尝试重现 ARCamera 的项目点函数 但由于某种原因 这些值没有正确匹配 我采用 ARCamera 的投影矩阵和视图矩阵 并应用基本的 CG 透视变换数学 PV p 但 NDC 值与 ARCamera 的项目点函数给出的像素值不匹
  • CATransform3D 可以用来获取 Face Mesh 中的眼睛尺寸吗?

    我正在尝试使用 ARKit 的 3D Face Mesh 获取眼睛的宽度和 2 只眼睛的距离 我用过CA变换3D of ARAnchor struct CATransform3D CGFloat m11 m12 m13 m14 CGFloa
  • SCNText 对齐在 iOS 中不起作用

    我尝试右对齐 但它仍然是左对齐 let txt SCNText string TEST extrusionDepth 10 txt chamferRadius 5 0
  • SceneKit - 向场景添加新的 SCNNode 会导致严重的滞后

    我发现向场景中添加 SCNNode 使用 SCNGeometry 会导致严重的滞后峰值 根据时间分析器 它必须生成几何图形 至少函数 方法是这样调用的 它是在节点添加到场景时执行的 而不是在创建节点时执行的 因此 使用 SCNNode 创建
  • ARKit 中的 ChromaKey 视频

    我正在尝试在 ARKit 中对视频进行色度键控 我所做的与 Felix 在这里所做的非常相似 SKScene 中的 GPUImageView 作为 SKNode 材质 在 ARKit 上播放透明视频 https stackoverflow
  • SceneKit - 如何获取 .dae 模型的动画?

    好吧 我在这里使用 ARKit 和 SceneKit 我在查看其他涉及 SceneKit 试图在其中建立模型的问题时遇到了麻烦 dae格式化并加载各种动画以使该模型运行 现在我们在 iOS11 中似乎某些解决方案不起作用 这是我从基地获取模
  • SceneKit 在与 Swift 接触后获取纹理坐标

    我想在 3D SceneKit 场景中操作 2D 纹理 因此我使用此代码来获取本地坐标 IBAction func tap sender UITapGestureRecognizer var arr NSArray my3dView hit
  • SceneKit 修改 3D 对象并导出文件

    在我的应用程序中 我使用 SceneKit Framework 在 SCNView 中显示 3D 对象 并导出修改后的文件 并进行一些小的更改 如颜色 温度等 但在将其导出到文档文件夹后 我得到了原始文件 在这里我可以显示 3D 对象并对其
  • 在 SceneKit 游戏中为 SCNNode 制作 SCNConstraint (LookAt) 动画以使过渡逐渐进行

    一般来说 当你想让游戏中的角色面对镜头时 可以使用 SCNLookAtConstraint 这实际上也对我很有帮助 Below 我的对象是我试图根据约束定向的节点 Enemy 指的是场景中的某个节点 pointOfView 是场景的视角 当
  • 如何使用四元数在 SceneKit 中使用平移手势旋转相机

    我正在使用 iOS 构建 360 度视频查看器SceneKit https developer apple com library ios documentation SceneKit Reference SceneKit Framewor
  • 在SCNNode中添加CIFilter使节点变成白盒

    我想添加一个CIGaussianBlur to a SCNNode正在 ARKit 中显示 然而 添加该过滤器会将节点变成 白盒 这是没有和有过滤器的节点 No CIFilter With CIFilter 这是相关代码 let gauss
  • 当您感兴趣的任务完成时,是什么让完成处理程序执行该块?

    我一直在询问并试图了解完成处理程序是如何工作的 我用过很多 也读过很多教程 我将在这里发布我使用的代码 但我希望能够创建自己的代码 而无需使用其他人的代码作为参考 我理解这个完成处理程序 其中调用者方法 void viewDidLoad n
  • 如何改善 ARKit 3.0 中的人物遮挡

    我们正在开发一个使用 ARKit 中的人物遮挡的演示应用程序 因为我们想在最终场景中添加视频 所以我们使用SCNPlanes 使用 a 渲染视频SCNBillboardConstraint以确保他们面向正确的方向 这些视频也是部分透明的 使
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 金属中的 SCN 着色器修改器 - 将统一传递给着色器

    我正在尝试将着色器修改器与 Metal 一起使用 我无法弄清楚如何声明制服 到目前为止我的片段修饰符是 color changes pragma arguments float4x4 u color transformation pragm

随机推荐