2017-07-11 17 views
9

Trong một trong các dự án phát triển ứng dụng iOS của tôi, bất cứ khi nào tôi cố gắng đẩy chế độ xem trên ARSCNView. các ứng dụng được đóng băng ở đây dưới đây là mã của tôi. Vui lòng đề xuất một giải pháp thích hợp nếu bạn biết như vậy.Khi Chế độ xem mới xuất hiện trên ứng dụng Chế độ xem cảnh được đóng băng

-> nhận được ứng dụng bị đóng băng khi nhìn push trên sceneView khiển

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]) 
     } 
} 
+0

Bạn nhận được bao xa? Bạn đang ở đâu khi bạn đóng băng? –

+0

bất cứ khi nào tôi đang cố gắng đẩy hoặc trình bày chế độ xem khác ở trên SceneView. có nghĩa là đẩy xem hoạt hình thành công và toàn bộ ứng dụng sẽ bị đóng băng. – imjaydeep

+0

Đặt điểm ngắt ngoại lệ và cho chúng tôi biết bạn đang cố định dòng nào. –

Trả lời

2

Bạn không nên gián đoạn phiên AR đối với bất kỳ lý do. Cố gắng tái cấu trúc thiết kế của bạn bằng màn hình bật lên.

Có một iOS 11 Beta lỗi, mà đóng băng ARCamera, khi ARSCNView biến mất, vì vậy, nếu bạn thực sự cần phải tạm thời che giấu màn hình với AR:

  1. Di ARSCNView từ kịch bản và loại bỏ IBOutlet khỏi tầm nhìn điều khiển;
  2. Tạo ARSCNView theo chương trình, khi UIViewController xuất hiện;
  3. Xóa ARSCNView, khi UIViewController biến mất.

Có một ví dụ nhỏ:

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() 
    } 
} 

Tất nhiên, bạn nên kiểm tra khung hình của bạn để xem cảnh và thiết lập ARSCNView, ARSessionSCNScene khi bạn cần nó.

Xcode Beta 5

Hầu hết đóng băng đã được cố định trong bản Beta 5. Nhưng đôi khi nó vẫn đóng băng, giống như khi bạn đang sử dụng bộ điều khiển chia sẻ quan điểm bản địa.

-1

Dường như với tôi bạn nên có một chức năng ghi đè viewDidAppear và khởi setupSession của bạn() ở đó.

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

    // Prevent the screen from being dimmed after a while. 
    UIApplication.shared.isIdleTimerDisabled = true 

    // Start the ARSession. 
    setupSession() 
} 
Các vấn đề liên quan