imj*_*eep 10 scenekit swift arkit
在我的一个iOS App开发项目中,每当我试图在ARSCNView上推送视图时.应用程序冻结在下面是我的代码.如果您了解相同的解决方案,请建议适当的解决方案.
- >在sceneView控制器上推送视图时让应用程序冻结
let session = ARSession()
var sessionConfig: ARSessionConfiguration = ARWorldTrackingSessionConfiguration()
var use3DOFTracking = false {
didSet {
if use3DOFTracking {
sessionConfig = ARSessionConfiguration()
}
sessionConfig.isLightEstimationEnabled = true
session.run(sessionConfig)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.setupScene()
setupSession()
}
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.tabBar.isHidden = false
session.run(sessionConfig, options: [.resetTracking, .removeExistingAnchors])
}
override func viewDidDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
session.pause()
}
func setupScene() {
sceneView.delegate = self
sceneView.session = session
sceneView.antialiasingMode = .multisampling4X
sceneView.automaticallyUpdatesLighting = false
sceneView.preferredFramesPerSecond = 60
sceneView.contentScaleFactor = 1.3
//sceneView.showsStatistics = true
enableEnvironmentMapWithIntensity(25.0)
if let camera = sceneView.pointOfView?.camera {
camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
}
}
func setupSession() {
if let worldSessionConfig = sessionConfig as? ARWorldTrackingSessionConfiguration {
worldSessionConfig.planeDetection = .horizontal
session.run(worldSessionConfig, options: [.resetTracking, .removeExistingAnchors])
}
}
Run Code Online (Sandbox Code Playgroud)
您不应以任何原因中断 AR 会话。尝试使用弹出屏幕重新构建您的设计。
iOS 11 Beta 存在一个错误,ARCamera当 ARSCNView 消失时,该错误会冻结,因此,如果您确实需要使用 AR 暂时隐藏屏幕:
ARSCNView删除;IBOutletARSCNView当出现时以编程方式创建UIViewController;ARSCNView。有一个简短的例子:
class ViewController: UIViewController, ARSCNViewDelegate {
// Weak reference for scene view.
weak var sceneView: ARSCNView!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a new AR Scene View.
let sceneView = ARSCNView(frame: view.bounds)
sceneView.delegate = self
sceneView.showsStatistics = true
view.addSubview(sceneView)
// Create a new scene.
sceneView.scene = SCNScene(named: "art.scnassets/ship.scn")!
// Running session.
sceneView.session.run(ARWorldTrackingSessionConfiguration())
// Saving weak reference.
self.sceneView = sceneView
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Removing current SceneView to avoid freezes.
sceneView?.removeFromSuperview()
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您应该根据需要检查框架的场景视图和设置ARSCNView。ARSessionSCNScene
Xcode 测试版 5
大多数冻结问题已在 Beta 5 中得到修复。但有时它仍然会冻结,例如当您使用本机共享视图控制器时。
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |