Ios 如何录制ARKit场景但排除UI元素?
我正在使用ARKit和Scenekit进行渲染。我想让用户捕获AR会话的视频,以便他们可以将其保存到照片中或共享 目前我正在使用它,但性能还有待提高,我遇到了一些难以解决的bug。我发现的其他图书馆也没有比这更好 似乎是理想的解决方案,但它记录了我的整个应用程序,包括用户界面。有没有办法让ReplayKit只记录AR内容,而不包括用户界面?您可以使用它,但没有很好的文档记录。关键是要在一个单独的Ios 如何录制ARKit场景但排除UI元素?,ios,swiftui,scenekit,arkit,replaykit,Ios,Swiftui,Scenekit,Arkit,Replaykit,我正在使用ARKit和Scenekit进行渲染。我想让用户捕获AR会话的视频,以便他们可以将其保存到照片中或共享 目前我正在使用它,但性能还有待提高,我遇到了一些难以解决的bug。我发现的其他图书馆也没有比这更好 似乎是理想的解决方案,但它记录了我的整个应用程序,包括用户界面。有没有办法让ReplayKit只记录AR内容,而不包括用户界面?您可以使用它,但没有很好的文档记录。关键是要在一个单独的UI窗口中呈现所有UI元素,该窗口覆盖在包含AR内容的主UI窗口之上。ReplayKit只记录主窗口,
UI窗口
中呈现所有UI元素,该窗口覆盖在包含AR内容的主UI窗口
之上。ReplayKit只记录主窗口,因此使用此结构,用户界面元素不会显示在记录中
虽然有更好的方法可以做到这一点,但下面是我如何为基于SwiftUI的应用程序设置此窗口结构的示例。在这里,我使用该属性将AR内容标记为主窗口,同时在更高级别将UI放入其自己的辅助窗口:
class SceneDelegate:UIResponder,UIWindowSceneDelegate{
窗口:UIWindow?
uiWindow:uiWindow?
func场景(u场景:UIScene,willConnectTo会话:UISceneSession,选项
如果让windowScene=场景为?UIWindowScene{
//为AR内容创建一个窗口。
//这是主窗口。
让arWindow=UIWindow(windowScene:windowScene)
self.arWindow=arWindow
arWindow.windowLevel=.normal
//在此处添加AR视图控制器或延迟设置视图控制器
//当您实际需要显示AR内容时
设vc=UIViewController()
arWindow.rootViewController=vc
//现在为UI创建一个窗口
让uiWindow=uiWindow(windowScene:windowScene)
self.uiWindow=uiWindow
//设置级别将使此窗口的内容从replaykit中排除
uiWindow.windowLevel=uiWindow.Level(uiWindow.Level.normal.rawValue+1)
uiWindow.isOpaque=false
//呈现基于SwiftUI的用户界面
让内容=MyUserInterfaceView()
.背景(颜色.清晰)
let hosting=UIHostingController(rootView:content)
hosting.view.backgroundColor=.clear
hosting.view.isOpaque=false
uiWindow.rootViewController=托管
uiWindow.makeKeyAndVisible()文件
}
}
}
我的应用程序惰性地初始化AR内容,因此我只需在需要显示时更新arWindow.viewController
请注意:
- 这种方法要求您将AR视图控制器与用户界面的其他部分分开。在许多情况下,这是一个简单的更改,但对于更复杂的应用程序来说,可能会涉及到很多问题
- 请记住,将AR内容和布局拆分到自己的窗口后,AR视图控制器上的任何用户事件处理程序和手势识别器可能不再按预期工作 我通过在主布局中使用一个透明的代理视图控制器来解决这个问题,该控制器将用户事件转发到真实的AR视图控制器
- 这种方法不是特定于ARKit的。它也适用于普通SceneKit应用程序、金属应用程序和传统应用程序
- 与某些第三方录制库不同,ReplayKit在录制屏幕时会提示用户 事实上,我很喜欢这个功能,因为它可以让用户很容易地选择是否需要录制麦克风。不过,你可能会发现它会成为阻碍,所以第三方录制库仍然有一个使用案例
- ReplayKit还提供了一个很好的内置用户界面,用于剪辑和保存录制的视频