![](/img/trans.png)
[英]Has anyone noticed iOS10 NSPersistantContainer. Is it a replacement for NSPersistantStoreCoordinator?
[英]Replacement for ARKit in iOS10
我想将ARKit包含在专为iOS10 +设计的应用程序中,如果iOS版本低于11,我将用SceneKit替换ARKit。
不幸的是,似乎目前尚无办法?
根据您如何设置您的期望,也可以使用SceneKit从ARKit一个“回退” -具体而言,从ARSCNView
。
您可以轻松地创建一个3D内容体验,当在支持ARKit的设备上运行时,它可以通过AR在“真实世界”中出现,并且在完全虚拟的设置(即以3D渲染,而没有相机作为背景)时,在没有ARKit的情况下运行。
注意: ARKit支持不仅限于iOS 11,还需要A9设备。 因此,您可能会想到iOS 11上较旧的硬件的回退体验,而不仅仅是iOS较旧的版本。
为此,您需要能够在运行时换出您的视图类。 这意味着不是在情节ARSCNView
中创建ARSCNView
,而是对其进行初始化并将其添加到代码中视图控制器的根视图中。
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = ARSCNView(frame: view.bounds)
sceneView.scene = // ... set up your SceneKit scene ...
view.addSubview(sceneView)
}
一旦你在做类似的东西,你可以在有条件的包裹关键部分使用ARSCNView
时可用, SCNView
否则。 实际上,您可能想要为此设置方便的功能...
var canUseARKit: Bool {
if #available(iOS 11.0, *) {
return ARWorldTrackingSessionConfiguration.isSupported
} else {
return false
}
}
然后,您可以条件化您的视图设置:
override func viewDidLoad() {
super.viewDidLoad()
let sceneView: SCNView
if canUseARKit {
sceneView = ARSCNView(frame: view.bounds)
} else {
sceneView = SCNView(frame: view.bounds)
}
sceneView.scene = // ... set up your SceneKit scene ...
view.addSubview(sceneView)
}
当然,此后还有更多工作要做:
但是,除了这些顾虑,与内SceneKit内容合作ARSCNView
无异于在SceneKit内容的工作不同SCNView
,所以对你的应用程序/游戏的其他部分可以共享大量的AR和非AR用户体验之间的代码和资源。
您可以使用以下语法有条件地选择包括功能:
if #available(iOS 11.0, *) {
// Use ARKit
} else {
// Use SceneKit
}
像任何框架一样,ARKit存在于存在它的系统版本中,并且没有其他系统版本中。 ARKit存在于iOS 11中,而不存在于iOS 10或更低版本中。 iOS 10用户永远无法使用ARKit(无需升级到iOS 11)。
(即使那样,ARKit也只能在运行iOS 11的一部分设备上使用,因为它的功能高度依赖于硬件。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.