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

如何在不冻结ARSession的情况下将ARSCNView放入Tabview控制器?

在不冻结ARSession的情况下将ARSCNView放入Tabview控制器,可以通过以下步骤实现:

  1. 创建一个新的Tabview控制器,并将其设置为主视图控制器。
  2. 在Tabview控制器的某个选项卡中,创建一个新的UIViewController,并将其设置为该选项卡的根视图控制器。
  3. 在该UIViewController中,创建一个ARSCNView实例,并将其添加为视图控制器的子视图。
  4. 在视图控制器的生命周期方法中,进行ARSession的管理,以确保不冻结ARSession。

以下是一个示例代码,展示了如何实现上述步骤:

代码语言:swift
复制
import UIKit
import ARKit

class ARViewController: UIViewController, ARSCNViewDelegate {

    var arView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 创建ARSCNView实例
        arView = ARSCNView(frame: view.bounds)
        arView.delegate = self

        // 将ARSCNView添加为当前视图控制器的子视图
        view.addSubview(arView)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // 创建ARSession配置
        let configuration = ARWorldTrackingConfiguration()

        // 运行ARSession
        arView.session.run(configuration)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // 暂停ARSession
        arView.session.pause()
    }

    // 实现ARSCNViewDelegate的方法
    // ...

}

class TabViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 创建AR视图控制器
        let arViewController = ARViewController()

        // 将AR视图控制器添加到选项卡中
        let tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 0)
        arViewController.tabBarItem = tabBarItem

        // 将AR视图控制器添加到选项卡控制器
        viewControllers = [arViewController]
    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        // 在选项卡切换时,切换ARSession的运行状态
        if let arViewController = selectedViewController as? ARViewController {
            if item.tag == 0 {
                arViewController.arView.session.run(arViewController.configuration)
            } else {
                arViewController.arView.session.pause()
            }
        }
    }

}

在这个示例中,我们创建了一个Tabview控制器,并在其中的一个选项卡中添加了一个ARViewController。在ARViewController中,我们创建了一个ARSCNView实例,并将其作为视图控制器的子视图。在TabViewController中,我们通过UITabBarItem将ARViewController添加到选项卡中,并在选项卡切换时控制ARSession的运行状态。

请注意,这只是一个示例代码,具体的实现可能因你的项目结构和需求而有所不同。你可以根据自己的实际情况进行调整和扩展。

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

相关·内容

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

在本节中,我们将看看如何在后面配置提供的ARKit模板。我们将发现什么是世界跟踪和AR会话。同样,我们将学习如何将一些调试选项应用于场景中的指导。...AR场景视图 ARKit模板已经放入对象库中可用的ARSCNView视图类中。此视图反映了相机看到的内容并将其显示在屏幕上。...已定义一个称为配置的新会话配置, 以允许进行世界跟踪。 AR会话 然后,我们需要使用刚刚设置的配置运行会话。 一个ARSession允许您运行和应用不同的技术。...默认情况下,已在模板中写入的显示消息为此应用程序将使用摄像头进行增强现实。如果您想从头开始AR应用程序,这是必须的步骤。 ?...统计信息提供有关场景渲染性能的信息,如每秒帧数(fps),动画,物理等.Apple建议将fps设置为60.在您的设备上,您可以单击+按钮展开统计栏更多细节。

2.5K20
  • ARKit和CoreLocation:第一部分

    ARSession:在ARKit中,ARSession协调创建增强现实体验所需的逻辑和数据。这包括摄像机和运动数据以及在周围移动时跟踪世界所需的计算。...ARFrame:** ARFrame**包含视频帧数据和位置跟踪数据,这些数据将传递到currentFrame属性中的ARSession。...image.png ARWorldTrackingConfiguration:用于跟踪设备方向,位置和检测相机记录的特征点(如相机记录的表面)的配置。...worldAlignment:****ARSession上的worldAlignment属性定义ARSession如何在3D坐标映射系统上解释ARFrame的运动数据,该系统用于跟踪世界并构建增强现实体验...向量,矩阵和线性代数,哦不! ? 一个二乘四的矩阵 如果你还记得回到数学课,那么矢量有一个幅度和方向。

    2.3K20

    ARKit 初探

    快速移动 通常情况下检测和估算 3D 姿态只会借助图片,如果摄像头移动太快图片就会糊,从而导致追踪失败。但 ARKit 会利用视觉惯性里程计,综合图片信息和设备运动传感器来估计用户转向的位置。...ARSCNView ARSCNView 继承自 SceneKit 中的 SCNView。ARSCNView是一个非常复杂的类,它不仅拥有SCNView的功能,而且它还管理着 ARSession。...ARKit.png SceneKit 的主要作用是将虚拟物体展示在3D场景中。...一般我们无需去创建一个ARCamera,因为在初始化 AR 时,它就帮我们将ARCamera创建好了。另外,我们一般也不直接使用 ARCamera 的 API,默认都是设置好的。...ARSession是它的核心,它协调内部模块进行场景的各种计算。而 ARSCNView 只是渲染技术中的一种,我们完成可以通过 OpenGL/Metal 来替换掉它。

    2.4K20

    ARKit:增强现实技术在美团到餐业务的实践

    此外,还可以探测到预设的 52 种丰富的面部动作,如眨眼、微笑、皱眉等等。...通常情况下来讲,这么做的理由是因为 AROrientationTrackingConfiguration 的追踪能力受限,官方文档不推荐直接使用。...ARSession 开启时的设备位置即是坐标轴的原点。...ARSCNView 是 SCNView 的子类,它做了三件事: 将设备摄像头捕捉的每一帧的图像信息作为 3D 场景的背景 将设备摄像头的位置作为 3D 场景的摄像头(观察点)位置 将 ARKit 追踪的真实世界坐标轴与...卡片位置 对于距离用户过近的商家卡片,会出现两个问题: 由于 ARKit 自动将卡片展现得近大远小,身边的卡片会大到遮住了视野 前文提到的 ARSession 使用 AROrientationTrackingConfiguration

    2.1K20

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

    在上一篇文章中,我们使用ARKit来检测现实世界中的水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们的AR体验添加虚拟内容,并开始与检测到的平面进行交互。...到本文结束时,我们将能够将立方体放入世界,将真实物理应用于立方体,以便它们相互作用并产生微型冲击波,使立方体飞得很快。...这个代码非常简单,ARSCNView包含一个hitTest方法,你传递屏幕坐标,它负责通过相机原点从那个点投射3D光线并返回结果: - (void)handleTapFrom: (UITapGestureRecognizer...为此,您需要更新ARSession配置的planeDetection属性并重新运行会话。...默认情况下,会话将保持相同的坐标系和找到的任何锚点: // Get our existing session configuration ARWorldTrackingSessionConfiguration

    99810

    从用SwiftUI搭建项目说起

    ,不算是真的深入的掌握,我对SwiftUI也是在学习当中,现在能查阅的关于SwiftUI的资料很多是需要收费的,遇到问题只能想办法努力解决,有写的不钟意的地方,希望多加指正!...这两张图相信看过苹果官方SwiftUI介绍文档并且跟着写了一遍代码的同学应该不陌生,当然我们的目的不是说这两篇的代码,这个具体的可以到下面连接去查看,我自己跟着写了一遍之后对SwiftUI也是有了一个基本的认识...App 和 Scene 部分,可以看到Swift5.1之后在完全无需引入UIKit 的情况下我们就创建了一个多平台的App工程,代码也从原本的基于 UI/NS HostViewController 变成了基于...在UIKit中我们的导航、标签都是通过控制器来管理,但是在SwiftUI中他们分别是通过NavigationView+TabView管理的,我们得在认识上有一个基本的转变,从Controller到View...简单看看Na+Tb的代码 ---- 从SceneDelegate开始, 根控制器就是 UIHostingController,我们需要做的第一步就是设置它的根视图 rootView //

    4.5K20

    彻底搞懂容器技术的基石: cgroup

    容器技术其实很早就出现了,但为何在 Docker 出现后才开始有了较为显著的发展?早期的 chroot 、 Linux VServer 又有哪些问题呢?...但是这种方式,只能迁移一个进程在单个 write(2) 上的调用(如果一个进程有多个线程,则会同时迁移所有线程,但也要参考线程子树,是否有将进程的线程放入不同的 cgroup 的记录)。...简而言之,只有不包含任何进程的 cgroup 才能在其 cgroup.subtree_control 文件中启用域控制器,这就保证了,进程总在叶子节点上。...挂载 cgroup 层次结构时,你可以指定要挂载的子系统的逗号分隔列表作为文件系统挂载选项。默认情况下,挂载 cgroup 文件系统会尝试挂载包含所有已注册子系统的层次结构。...如果已经存在具有完全相同子系统集的活动层次结构,它将被重新用于新安装。 如果现有层次结构不匹配,并且任何请求的子系统正在现有层次结构中使用,则挂载将失败并显示 -EBUSY。

    2.1K31

    ARKit介绍

    有一个ViewController实现AR场景视图delegate(ARSCNViewDelegate),它已经有一个ARSCNView很好的IB出口,因为这是用于使用相机显示带有3D SceneKit...如果您没有这些知识或任何3D渲染,如Metal,OpenGL或Unity,那么我建议您在使用ARKit之前查看其中一个,因为它将帮助您理解我将呈现的代码(例如,矢量和矩阵等3D概念以及可以对它们执行的一般操作...为了实现10厘米的平移,我需要在第四列上应用转换z。正值定义为更接近相机,负值更远。因此,如果使用0,对象位置将位于当前相机框架的正前方。...在那种情况下,我需要平面检测功能。...我已经知道如何将节点放置在摄像机所在的位置,但我如何获得距离最近的平面的距离。答案是:hitTest(_:types:)。

    2.3K20

    一篇搞懂容器技术的基石: cgroup

    populated - cgroup 及其子节点中包含活动进程,值为1;无活动进程,值为0. frozen - cgroup 是否被冻结,冻结值为1;未冻结值为0....但是这种方式,只能迁移一个进程在单个 write(2) 上的调用(如果一个进程有多个线程,则会同时迁移所有线程,但也要参考线程子树,是否有将进程的线程放入不同的 cgroup 的记录)。...简而言之,只有不包含任何进程的 cgroup 才能在其 cgroup.subtree_control 文件中启用域控制器,这就保证了,进程总在叶子节点上。...挂载 cgroup 层次结构时,你可以指定要挂载的子系统的逗号分隔列表作为文件系统挂载选项。默认情况下,挂载 cgroup 文件系统会尝试挂载包含所有已注册子系统的层次结构。...如果已经存在具有完全相同子系统集的活动层次结构,它将被重新用于新安装。 如果现有层次结构不匹配,并且任何请求的子系统正在现有层次结构中使用,则挂载将失败并显示 -EBUSY。

    2.1K41

    深度学习模型的训练总结

    在运行推理之前,必须调用model.eval()以将 dropout 和批量标准化层设置为评估模式。不这样做会产生不一致的推理结果。...方法一:设置requires_grad为False 这种方法的效果是:被冻结的层可以前向传播,也可以反向传播,只是自己这一层的参数不更新,其他未冻结层的参数正常更新。...方法中,将需要冻结的层放在 with torch.no_grad()下。...放入with torch.no_grad()中的网络层,可以前向传播,但反向传播被阻断,自己这层(如self.layer2)和前面的所有与之相关的层(如self.layer1)的参数都会被冻结,不会被更新...方法二:不能单独屏蔽某一个epoch,但是使用起来简单便捷,大多数的情况下其实都是够用的。 这里我再推荐一篇文章【pytorch】筛选冻结部分网络层参数同时设置有参数组的时候该怎么办?

    70310

    iOS逆向(8)-Monkey、Logos

    在之前的几篇文章里已经介绍了APP重签名,代码注入,Hook原理,可以发现,将工程建好,脚本写好,我们就可以以代价非常小的方式对一个第三方的APP进行分析。...安装ldid(如安装theos过程安装了ldid,跳过) brew install ldid 2.安装 你可以通过以下命令选择指定的Xcode进行安装: sudo xcode-select -s /...,将下载好的ipa包放入工程对应的TargetApp目录下。...而我们现在要对优酷进行Hook,但我们手上是没有优酷的源码的,所以此时此刻就需要对其进行动态分析了。 下面我将结合Xcode和class dump对优酷的设置页面简单的进行分析。...我们现在要做的就是在这个页面的TableView的最后一行加上Cell,里面有个Switch,用于打开/关闭屏蔽广告功能(只是UI,这篇文章不牵扯到屏蔽广告的具体实现,如果你需要,点个小心心,持续关注我哦

    1.9K20

    掌握 SwiftUI 的 Safe Area

    掌握 SwiftUI 的 Safe Area 访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验 Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供的视图重叠的内容空间...本文将探讨如何在 SwiftUI 中获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容。...•all(默认)上述两种安全区域划分的合集 iOS 13 并没有提供键盘自动避让功能,开发者需要编写一些额外的代码来解决软键盘不恰当遮盖视图(如 TextField )的问题。...从 iOS 14 开始,SwiftUI 计算视图的安全区域时,将软键盘在屏幕上的覆盖区域(iPadOS 下,将软键盘缩小后键盘的覆盖区域将被忽略)也一并进行考虑。...List(0..<100){ id in Text("id\(id)")} safeAreInsetList1 当被嵌入到 TabView 时,TabView 会调整其内部的安全区域。

    7.7K31

    无回归器引导的药物反应预测方法

    回归控制器模型将分子与细胞系的响应值(如IC50分数)的自然语言描述作为文本输入,并使用分子和细胞系的常规表示(例如序列和基序编码)作为常规输入。...消融实验 作者进行了消融实验,以验证该方法在混合数据训练、无条件预训练和部分权重冻结方面的有效性。 混合数据训练 指的是将一个小的条件数据集和一个大的无条件数据集结合起来进行联合训练。...这种方法有效地减少了生成分子与目标分子之间的FCD和MMD,并且在不进行后期修正的情况下提高了分子的有效性。...无条件预训练 是指在数据集(如QM9或ZINC250k)上训练无条件生成模型,同时训练条件模型。在保持条件不变的情况下,使用在QM9上训练的无条件模型显著提高了分子生成质量。...在条件混合训练阶段,与其他方法不同,作者设置B1的权重不冻结。不同的数据集发挥不同的作用,简单地冻结预训练分支B1的权重可能会妨碍有效的数据分布学习。

    11110

    边缘计算笔记(二): 从tensorflow生成tensorRT引擎的方法

    如何在Jetson TX2上执行TensorRT图像分类模型 由于这是一个大约1个小时的视频,篇幅有限,所以我们将利用三天的时间重现整个笔记内容。 今天是第二部分 還有最後一部分,大家堅持住 ? ?...这个脚本可能不适用于所有张量流模型,但适用于那些记录的 在github项目中的模型。接下来,我们将讨论如何在jetson上使用tensorRT优化和执行tensorflow模型。...但在深入了解Forzen grah的细节以及如何创建它之前,我们将首先讨论如何在Tensorflow中序列化gragh。 ?...当将冻结的图序列化后的二进制输出,保存到磁盘上的时候,通常我们叫这个为冻结图文件,或者其他的类似叫法。这个文件将用作后续的转换脚本输入用。 ?...因为TensorRT会默认使用图中的placeholder nodes,所以有时候也可以不指定输入节点的名字。

    4.1K40

    《iPhone X ARKit Face Tracking》

    iPhone X前置深度摄像头带来了Animoji和face ID,同时也将3D Face Tracking的接口开放给了开发者。...需注意的是,深度摄像头采样频率和颜色摄像头并不一致,因此ARFrame的capturedDepthData属性也可能是nil。实测下来在帧率60的情况下,每4帧里有1帧包含深度信息。...其接口方便易用,底层使用Metal2渲染,且提供了多种材质以及光照模型,通常情况下无需自定义shader即可完成3D贴脸以及3D挂件的渲染。...如果使用的是dae且不是放在bundle里面,需要提前用scntool压缩,模型加载及动画播放所遇到的坑此处不赘述。...写在末尾 这次能有机会参加Apple的封闭开发且是如此有趣的模块,在没有网络的情况下摸索着做出demo,接触到了最前沿的AR相关技术,对我来说是一份非常宝贵的经历。心怀感恩,踏步前行。

    2K30

    【Web技术】850- 深入了解页面生命周期API

    由于不可能限制用户打开新的浏览器标签页并将其留下,因此浏览器采取了一些措施,以在浏览器标签页不活动时重新分配资源。...DISCARDED - 为了节省资源,将冻结状态移动到Discarded状态。 假设一个网页长时间处于冻结状态,在这种情况下,浏览器会自动将网页卸载到丢弃状态,以节省资源。...在这种情况下,浏览器会自动将页面卸载到丢弃状态,释放一些内存。而如果用户再次访问被丢弃的页面,浏览器会重新加载页面,回到活动状态。 值得注意的是,用户一般会在资源受限的设备中体验到丢弃状态。...好了,现在我们知道在每个状态下要做什么了,让我们看看如何在我们的应用程序中捕获每个状态。 如何在代码中捕获生命周期状态?...为了克服跨浏览器的不兼容性,Google开发了一个名为Pagelifecycle.js的库,作为以下浏览器的多维填充。 总结 当用户没有积极参与时,网页不应该消耗过多的资源。

    1.3K20

    《 iPhone X ARKit Face Tracking 》

    需注意的是,深度摄像头采样频率和颜色摄像头并不一致,因此ARFrame的capturedDepthData属性也可能是nil。实测下来在帧率60的情况下,每4帧里有1帧包含深度信息。...其接口方便易用,底层使用Metal2渲染,且提供了多种材质以及光照模型,通常情况下无需自定义shader即可完成3D贴脸以及3D挂件的渲染。...首先我们需要添加一个ARSCNView,设置好scene以及delegate,在viewWillAppear里添加下面两行代码 ARFaceTrackingConfiguration *configuration...如果使用的是dae且不是放在bundle里面,需要提前用scntool压缩,模型加载及动画播放所遇到的坑此处不赘述。...写在末尾 这次能有机会参加Apple的封闭开发且是如此有趣的模块,在没有网络的情况下摸索着做出demo,接触到了最前沿的AR相关技术,对我来说是一份非常宝贵的经历。心怀感恩,踏步前行。

    3.6K00

    FL Studio21最新中文版本全新功能详细介绍

    常规设置(General Settings):默认情况下开启“将撤消记录放入回收站”。若关闭此功能,则在撤消时被删除。·翻转铅笔按钮-将笔的辅助按钮的行为与主按钮交换。...插件管理器(Plugin Manager)-不再允许某些不兼容的插件搜索路径。设置窗口(Settings window)-重新设计了窗口,以允许使用多语言文本,但可能需要更多空间。...触摸控制器(Touch Controller)-当音符数据从钢琴卷帘窗播放时,在触摸控制器上可视化来自所选通道的音符活动。键入值(Type in value)-选择时显示当前值的更多信息。...浏览器(Browser)-为选项卡添加“冻结”选项。“冻结”时,浏览器停止保存状态(文件夹是否折叠)。“折叠结构”按钮起到“恢复为冻结状态”的作用。...您现在可以在预览窗口中选择要显示的缓冲区·压缩(Zip)-在压缩项目中添加自定义效果。·触摸控制器(Touch controllers)-支持“添加窗口”列表中的触摸控制器窗口。

    3.8K20

    最新版水果FL Studio21新版本更新全解析!80项更新与改进!

    常规设置(General Settings):默认情况下开启“将撤消记录放入回收站”。若关闭此功能,则在撤消时被删除。·翻转铅笔按钮-将笔的辅助按钮的行为与主按钮交换。...插件管理器(Plugin Manager)-不再允许某些不兼容的插件搜索路径。设置窗口(Settings window)-重新设计了窗口,以允许使用多语言文本,但可能需要更多空间。...触摸控制器(Touch Controller)-当音符数据从钢琴卷帘窗播放时,在触摸控制器上可视化来自所选通道的音符活动。键入值(Type in value)-选择时显示当前值的更多信息。...浏览器(Browser)-为选项卡添加“冻结”选项。“冻结”时,浏览器停止保存状态(文件夹是否折叠)。“折叠结构”按钮起到“恢复为冻结状态”的作用。...您现在可以在预览窗口中选择要显示的缓冲区·压缩(Zip)-在压缩项目中添加自定义效果。·触摸控制器(Touch controllers)-支持“添加窗口”列表中的触摸控制器窗口。

    3.4K30
    领券