首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从不同的视图控制器添加3D对象时,Swift ARKit SceneView nil

是指在Swift中使用ARKit框架时,当我们尝试从不同的视图控制器添加3D对象到场景视图(SceneView)时,发现该场景视图为nil的情况。

这种情况可能发生在以下几种情况下:

  1. 未正确初始化ARKit场景视图:在使用ARKit进行增强现实应用开发时,必须正确初始化ARKit场景视图(SceneView)。可以通过代码创建并设置其frame,然后将其添加到视图层级中。如果未正确初始化场景视图,即未分配内存或未设置有效的frame,尝试在添加3D对象时将会导致SceneView为nil。
  2. 视图控制器生命周期问题:视图控制器的生命周期非常重要,在视图控制器的某些生命周期方法中添加3D对象可能会导致SceneView为nil。例如,在视图控制器的init方法中添加3D对象,由于视图层级尚未准备好,可能会导致SceneView为nil。正确的做法是在视图控制器的viewDidLoad方法中进行添加3D对象的操作。
  3. 视图层级关系错误:如果试图从一个视图控制器的视图层级中添加3D对象到另一个视图控制器的场景视图上,可能导致SceneView为nil。这通常发生在试图跨视图控制器传递场景视图引用时。解决方法是确保场景视图所属的视图控制器正确配置并在正确的视图层级中进行操作。

解决该问题的方法包括:

  1. 确保正确初始化ARKit场景视图,并将其添加到视图层级中。可以使用以下代码示例创建一个ARKit场景视图:
代码语言:txt
复制
let sceneView = ARSCNView(frame: view.bounds)
view.addSubview(sceneView)
  1. 在视图控制器的viewDidLoad方法中进行添加3D对象的操作,确保在视图准备好后执行。
  2. 如果需要在不同的视图控制器之间传递场景视图引用,可以使用委托模式或依赖注入等方式来确保正确的视图层级关系。

对于使用Swift ARKit中从不同的视图控制器添加3D对象时出现SceneView为nil的问题,腾讯云提供了与AR/VR相关的云服务产品:

  1. AR/VR云服务平台:提供丰富的AR/VR解决方案和开发工具,帮助开发者快速构建和部署增强现实和虚拟现实应用。详细信息请参考:AR/VR云服务平台
  2. 腾讯云AR/VR开发者平台:提供开发者工具和技术文档,帮助开发者更轻松地使用AR/VR技术进行应用开发。详细信息请参考:腾讯云AR/VR开发者平台

以上是关于从不同的视图控制器添加3D对象时,Swift ARKit SceneView为nil的问题的解释和解决方法,以及腾讯云相关产品的推荐。希望对您有帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

将模型添加到场景中 - 在您环境中显示3D内容

基本视图 在Main.Storyboard中,我们已经提到ARSCNView默认放在视图控制器顶部。但是,如果没有UIView作为基础,则仅限于您可以在用户界面上执行操作。...为了能够正确添加我们按钮,我们必须删除当前 ARSCNView并首先从对象添加UIView作为底层。接下来,选择相同ARKit SceneKit View并将其放回UIView之上。...调整大小以填充整个视图控制器。 约束 然后,单击Storyboard编辑器左下角第四个图标,将新约束添加到场景视图中。定义约束以确保您用户界面适应不同屏幕尺寸或设备方向。...添加按钮 我们想在视图添加一个按钮,用作在场景中添加模型触发器。对象库中,将UIButton拖动到场景视图顶部。在“ 属性”检查器中,删除“ 按钮”标题并将图像设置为“ 按钮/添加”。...右键单击视图控制器+ ARSCNViewDelegate.swift并选择新建文件...。然后,选择Swift File,单击Next。

5.5K20

ARKit上手 添加3D物体

开发语言选择SwiftSwift天然亲和ARKit,很多网上Demo都是用Swift,这样也方便移植和借鉴。 然后连接你测试设备并运行,app就可以运行了。...sceneView.scene = scene,然后添加代码如下: override func viewDidLoad() { super.viewDidLoad() // 存放所有3D几何体容器 let.../SpriteKit实现 ARKit中ARSCNView用于显示3D虚拟AR视图,它作用是管理一个ARSession,一个ARSCNView实例默认持有一个ARSession。...ARSession ARSession通过管理ARSessionConfiguration实现场景追踪并且返回一个ARFrame(添加3D物体模型时计算3D模型相对于相机真实矩阵位置需要使用) 给...本文将会使用ARKit创建一个简单app,结束就可以在AR世界里放置3D物体,并且可以用iOS设备绕着它移动。

2.2K10
  • iOS ARKit教程:赤手在空中绘画

    例如,当开发者移动设备上获得独立,AR炒作又开始了。除了大兔子变形金刚强劲回归之外,我们还看到了一大批应用程序,它们将3D对象打印在二维码上。但他们从来没有像一个概念那样腾飞。...两年过去了,当这个神奇产品被期待已久时候,它已经死了!许多批评人士分析了谷歌眼镜失败原因,把责任归咎于社交方面到谷歌在推出产品迟钝做法。...接下来,我们需要设置一个渲染3D对象视图。这是通过添加ARSCNView类型视图来完成。...其次,由于用户将双手放在桌子上,并且我们已经将表格作为一个平面来检测,所以将thumbnail位置2D视图投射到3D环境将会导致手指在表格上精确位置。...ARKit允许开发人员通过分析摄像机视图呈现场景并在房间中查找水平平面,在iPhone和iPad上构建沉浸式增强现实应用程序。 我们如何跟踪Apple Vision库对象

    1.8K10

    ARKit和CoreLocation:第一部分

    Apple文档: 增强现实(AR)描述了用户体验,这些体验将2D或3D元素设备相机添加到实时视图中,使得这些元素看起来居住在现实世界中。...运行会话配置ARKit会根据设备位置和方向创建场景坐标系; ARAnchor您创建任何对象或AR会话检测到对象都是相对于该坐标系定位。 ?...个人项目 - 8月11日 定义 ARSCNView: ARSCNView是SCNView子类,它是用于渲染3D内容标准SceneKit视图。因为它专门用于ARKit,它具有一些非常酷功能。...您不一定需要使用ARAnchor该类来跟踪添加到场景中对象位置,但通过实现ARSCNViewDelegate方法,您可以将SceneKit内容添加ARKit自动检测到任何锚点。...虽然这与它们用于位置节点方式不同,但它们足够接近,您可以开始考虑实际应用原则。为此,使用SceneKit创建一个新ARKit项目。当你运行它,屏幕前应该有一个漂浮在你面前屏幕截图。

    2.2K20

    使用CoreML和ARKit进行人脸检测和识别

    作者 | Omar M'Haimdat 来源 | Medium 编辑 | 代码医生团队 创建单视图应用程序 首先,需要使用单个视图应用创建一个iOS项目: 创建一个视图应用程序 现在已经拥有了自己项目...创建场景并将其添加到子视图 只有一个ViewController,它将是应用程序主要入口点。 在这个阶段,需要导入ARKit并实例化一个ARSCNView自动渲染来自设备相机实时视频作为场景背景。...它还会自动移动其SceneKit摄像头以匹配设备真实世界移动,这意味着不需要锚点来跟踪我们添加到场景中对象位置。...运行此配置,AR会话将检测用户面部(如果在前置摄像头图像中可见),并在其锚点列表中添加表示面部ARFaceAnchor对象。...这是sceneView属性中获取它简单方法: guard let pixelBuffer = self.sceneView.session.currentFrame?.

    2.4K20

    ARKit 配置-在您AR项目的幕后

    您可以通过添加标签,按钮和其他对象对象来自定义此视图,并轻松编辑其属性而无需触及代码。您还可以添加其他视图并管理它们之间链接。基本上,故事板是设计师最好朋友。...转到ViewController.swift文件。这是所有代码都是针对我们之前在Main.storyboard中看到视图控制器场景编写。 导入套件 套件是Apple提供框架,它们与特定主题相关。...UIKIT UIKit是开发iOS应用程序基本框架,它可以集成标签,按钮,条形图和各种视图控制器等组件。 SCENEKIT 如前所述,SceneKit是我们选择处理3D对象渲染技术。...场景视图 在课程内部,故事板到ARSCNView链接被称为SceneView。在Xcode中,此链接称为IBOutlet。您也可以在故事板中看到引用插座。...会话使用其会话实例控制所有处理,并由场景视图自动创建。当您开始体验,会话开始。 你能告诉我另一个用于ARKit流行技术例子吗?让我给你一个提示:Animoji。

    2.5K20

    ARKit介绍

    您甚至可以使用Metal,SceneKit和Unity和虚幻引擎等第三方工具渲染3D对象ARKit以卓越性能完成所有这一切,并且有很好文档记录。 需要一些想法才能使用ARKit?...,所以我决定使用ARKit创建自己测量应用程序。 我开始观看介绍ARKit:来自WWDC17iOS增强现实视频。然后我阅读文档并使用演示应用程序(在增强现实中放置对象)。...演示中,我了解到场景单元映射到ARKit米,所以这是一个很好提示。 两个节点之间距离 我想要一个基本应用程序,只需点击屏幕选择点并计算最后一个点击与前一个点距离。...然后我UITapGestureRecognizer在主视图添加了一个以识别用于添加节点轻击手势。...用户应该知道水平面何时可用,以便开始添加测量点。在苹果公司ARKit演示实现了一个方形指示器,我认为它可以使用该sceneView.debugOptions属性,但事实并非如此。 ?

    2.3K20

    聚焦位置-选择您喜欢位置放置虚拟物体

    让我们为焦点方块添加一个新Swift文件。右键单击视图控制器+ ARSCNViewDelegate并选择新建文件...。然后,选择Swift File,单击Next。...类变量 为此,请转到ViewController.swift文件。我们将首先在sceneView声明之后为焦点方块声明一个类变量。它将是具有焦点方形类属性节点。...guard focusSquare == nil else {return} let focusSquareLocal = FocusSquare() self.sceneView.scene.rootNode.addChildNode...答案是hitTest,这是一种ARHitTestResult方法,用于搜索与2D点和这些对象相交真实世界对象。然后,它沿着相机指向线对应于y坐标向2D点添加第三维。...打开和关闭 我们如何为焦点方块添加漂亮触感?您可能已经意识到我们有两个用于焦点方块资产图像,一个是开放,一个是关闭。这应该会给你一个提示,我们都会在不同情况下使用它们。

    2.4K30

    ARKit 教学:如何搭配SceneKit来建立一个简单ARKit Demo设定ARKit SceneKit ViewARSCNView移除物件

    本篇教学想法主要是学习AR与利用API来建置一个APP,藉由教学步骤,你将会一步步了解ARKit在实体装置上是如何与神奇3D物件来互动。 在开始前,请了解本篇教学仅是以基础功能应用为主。...结合 连接IBOutlet 设定ARSCNView Session 允许相机使用权限 将3D物件加到ARSCNView 加入手势判断功能到ARSCNView ARSCNView移除物件 加入多样物件到...档位置: import ARKit 接着请按住control并在ARKit ScenKitView上拖到至ViewController.swift,当连接到时,请指定为IBOutlet,并命名为sceneView...接下来,我们建立一个点位boxNode物件,这个点位可代表位置与一个物件在3D空间坐标,但对它自己而言,他本身不会有可以看到内容,需要协助它添加资讯。...是时候来做些点击手势辨识方法物件内调用方法 ARSCNView移除物件 在ViewController.swift加入下列代码: @objc func didTap(withGestureRecognizer

    1.8K20

    iOS版 使用ARKitSwift创建交互式Domino游戏

    在下面的教程中,我将向您展示如何使用SwiftARKit制作有趣Domino游戏。 这就是我们要做: ?...dominoes.gif 先决条件 这是一个中级教程,要求您对Swift有一个很好理解,以及ARKit和SceneKit一些基本知识。...如果检测到对象,则将返回对象以及交叉点。我们使用这些数据将我们多米诺骨牌添加到触摸屏幕地板上的确切位置。 我们必须为我们场景添加一个平移手势。...当我们设置nil为形状,SceneKit会自动将节点几何体用于物理形状。这意味着我们工作量减少了! 物理体具有许多不同物理特性,你可以改变它们质量,摩擦力,阻尼等。...当在SceneKit中首次创建光源,它默认指向-Z方向(直线向前)。我们想要旋转光源,使其朝向地板向下倾斜。 定向灯本身使我们场景非常暗。环境光各个方向照亮场景中所有对象。它将减轻整体场景。

    2.3K30

    ARKit by Example - 第1部分:AR立方体

    如果您熟悉基本3D概念,那将非常简单。 如果你不能等到文章结尾,这里有一个应用程序视频。正如您在使用ARKit所看到,我们可以将虚拟对象放置在现实世界中,并在我们移动相机时将它们固定到位。...ARKit核心课程 ARSCNView  - 辅助视图,有助于使用SceneKit渲染3D内容增强实时摄像机视图。...这堂课有几件事: 视图设备相机渲染实时视频流,作为3D场景背景 ARKit3D坐标系与SceneKit3D坐标系匹配,因此在此视图中渲染对象将自动匹配增强ARKit世界视图 自动移动虚拟...它负责控制摄像机,设备中收集所有传感器数据等,以构建这种无缝体验。ARSCNView实例已经有一个ARSession实例,您只需要在启动配置它。...: self.sceneView.autoenablesDefaultLighting = YES; 下一篇文章 在下一篇文章中,我们将开始使我们应用程序更有趣,添加一些更复杂对象,检测场景中平面以及与场景中几何体交互

    1.2K30

    建立您第一个AR体验

    创建运行AR会话应用程序,并使用平面检测使用SceneKit放置3D内容。...() configuration.planeDetection = [.horizontal, .vertical] sceneView.session.run(configuration) 仅当将显示它视图显示在屏幕上才运行会话...如果AR是您应用辅助功能,请使用该属性确定是否提供isSupported基于AR功能。 为检测到平面放置3D内容 设置AR会话后,可以使用SceneKit在视图中放置虚拟内容。...启用平面检测后,ARKit会为每个检测到平面添加和更新锚点。默认情况下,ARSCNView类为每个锚点添加一个SCNNode对象到SceneKit场景。...您视图委托可以实现向场景添加内容renderer(_:didAdd:for:)方法。当您将内容添加为与锚对应节点子节点,类会自动移动该内容,因为ARKit会细化其对平面位置估计。

    1.1K20

    ARKit示例 - 第3部分:添加几何和物理乐趣

    在上一篇文章中,我们使用ARKit来检测现实世界中水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们AR体验添加虚拟内容,并开始与检测到平面进行交互。...这是一个显示应用程序运行视频,您可以看到我们首先如何捕获水平平面,然后我们添加一些3D立方体与场景交互,然后最终导致一些小型爆炸使立方体跳转: youtube 与往常一样,您可以按照以下代码进行操作:...https://github.com/markdaws/arkit-by-example/tree/part3 命中测试 正如您在第一个教程中看到,我们可以在任何X,Y,Z位置插入虚拟3D内容,它将在现实世界中渲染和跟踪...在这个应用程序中,当用户单击屏幕,我们执行命中测试,这涉及获取2D屏幕坐标并通过2D屏幕点(在投影平面上具有3D位置)相机原点发射Ray并进入现场。...停止飞机检测 一旦我们绘制了世界并拥有多个平面,我们就不希望ARKit继续为我们提供新平面并可能更新现有的平面,因为这可能会影响我们已经添加到世界几何体。

    99010

    ARKit+Swift 版本机器学习算法 k-NN

    kNN-Swift-2.png k.png ARKit-KNN-2.png 维基介绍 在模式识别领域中,最近邻居法(KNN算法,又译K-近邻算法)是一种用于分类和回归非参数统计方法[1]。...一个对象分类是由其邻居“多数表决”确定,k个最近邻居(k为正整数,通常较小)中最常见分类决定了赋予该对象类别。若k = 1,则该对象类别直接由最近一个节点赋予。...在k-NN回归中,输出是该对象属性值。该值是其k个最近邻居平均值。...ARKit + Swift + k-NN 实现 创建 KNN 类(结构体 struct 也行,我是为了 与 sklearn 尽量一致)。...kNN-Swift-1.png ARKit 实现 能 3D 展示多好,别急,下面就是用 ARKit 实现 3D 版本。

    73600

    动画与光线-让幻像变现实

    您可以下载Final Xcode项目,以帮助您与自己进度进行比较。 变换:旋转 用于演示最常见和最简单动画是通过Y轴旋转3D对象。你几乎到处都能看到这种动画。...WorldOrigin 缩放 当您跟踪图像3D模型突然出现,我们可以添加更平滑过渡,例如缩放动画。声明动画师及其用于缩放iPhoneNode动作。...应用良好照明真的很难,你需要玩很多。转到ViewController.swift,让我们将一些光照应用到场景中。在sceneView声明中,启用默认光照以及更新光照方法。...镜面之后地球 聚光灯 在iPhoneX.scn中,您将看到一个聚光灯。这个场景带有一个灯光,但如果您使用自己3D模型,则需要通过拖放对象库中光源来自己定位。这是聚光灯设置。...我们学会了如何在应用良好照明同时缩放和制作模型动画。 原文: https://designcode.io/arkit-lighting

    1.2K30

    《 iPhone X ARKit Face Tracking 》

    由于不同AR体验对iOS设备有不同硬件要求,所有ARKit配置要求iOS设备至少使用A9及以上处理器,而face tracking更是仅在带有前置深度摄像头iPhone X上才会有。...对象),这样我们可以根据真实环境光方向及强度去对3D模型进行照射以达到更为逼真的AR效果。...其结构和iPhone7P后置双摄采集深度信息一样为AVDepthData。当设置其它AR模式该属性为nil。...实现原理是当用户人脸检测不到时记一个标志,再次检测到用户人脸将其3D蒙皮贴图换掉。...需要注意是,由于ARKit只对人脸区域进行建模,在3D模型设计时候还需去掉一些不必要部件:比如眼镜模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。

    3.6K00

    《iPhone X ARKit Face Tracking》

    由于不同AR体验对iOS设备有不同硬件要求,所有ARKit配置要求iOS设备至少使用A9及以上处理器,而face tracking更是仅在带有前置深度摄像头iPhone X上才会有。...对象),这样我们可以根据真实环境光方向及强度去对3D模型进行照射以达到更为逼真的AR效果。...其结构和iPhone7P后置双摄采集深度信息一样为AVDepthData。当设置其它AR模式该属性为nil。...实现原理是当用户人脸检测不到时记一个标志,再次检测到用户人脸将其3D蒙皮贴图换掉。...需要注意是,由于ARKit只对人脸区域进行建模,在3D模型设计时候还需去掉一些不必要部件:比如眼镜模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。

    1.9K30

    iOS ARKit教程:用裸露手指在空中画画

    例如,当开发人员移动摄像头访问各个帧,AR炒作再次起飞。除了伟大兔子变形金刚强大回归,我们看到一波应用程序在打印QR码上放下3D对象。但他们从未作为一个概念起飞。...为了实现前者,ARKit假设您手机是在真实3D空间中移动相机,因此在任何点丢弃一些3D虚拟对象将锚定到真实3D空间中该点。对于后者,ARKit会检测水平平面,如表格,以便您可以在其上放置对象。...接下来,我们需要设置一个可以渲染3D对象视图。这是通过添加类型视图来完成ARSCNView。...下面的代码演示了这一点: sceneView.hitTest通过将此2D点投影到最近平面下方,搜索与屏幕视图2D点对应真实平面。...其次,由于用户将他们手放在桌子上,并且由于我们已经将桌子检测为平面,因此将缩略图位置2D视图投影到3D环境将导致手指几乎准确位置。表。 下图显示了Vision库可以检测到功能点: ?

    2.2K30

    图像检测-如何通过扫描图像来制造幻觉

    在本课程中,您将学习如何通过检测您喜欢任何图像以及如何在呈现模型更改模型材质,将您自己3D模型放置在任何对象之上。...第一个AR项目 如果这是您第一个ARKit项目,我强烈建议您阅读我们ARKit简介,因为我们不会在这里介绍基础知识。...//sceneView.scene = scene 配置 这是一个图像检测应用程序,所以让我们将配置ARWorldTrackingConfiguration更改为ARImageTrackingConfiguration...{ let node = SCNNode() return node } 该渲染器允许您渲染场景中节点,所以你就可以将其添加在图像顶部。...节点默认定位与框重叠,所以让我们给它一个负间距。然后,将其添加到planeNode。

    2.4K20
    领券