![](/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.