Отслеживание процента загрузки файла .SCN - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в ARKIT, и мне просто интересно, есть ли способ отслеживать процент загрузки файла .SCN в процентах. Я пытался использовать сеанс URL, но не смог заставить его работать.

Хотя мой код работает хорошо, если мой код полностью отключен, пожалуйста, покажите мне, как сделать его лучше!

 private func dowloadModel(){
        let url = URL(string: "URL for .SCN")!

        URLSession.shared.dataTask(with: url) { data, response, error in

            if let error = error{
                print(error.localizedDescription)
                return
            }

            if let data = data{
                print(data)

                let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

                if let documentDirectory = documentDirectories.first{

                    let fileURL = documentDirectory.appendingPathComponent("Food.scn")
                    let dataNS : NSData? = data as NSData

                    try! dataNS?.write(to: fileURL, options: .atomic)

                    let url1 = URL(string: "URL for .jpg overlay")
                    let data1 = try? Data(contentsOf: url1!) //make sure your image in this url does exist
                    self.imagesOne = UIImage(data: data1!)

                    print("Saved!")
                }
            }

        }.resume()
    }

Вот как я рендерил узел:

 func addItem2(hitTestResult : ARHitTestResult){
        let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

        if let documentDirectory = documentDirectories.first{
            let fileURL = documentDirectory.appendingPathComponent("Food.scn")

            do{
                let scene = try SCNScene(url: fileURL, options: nil)
                let node = scene.rootNode.childNode(withName: "Burger", recursively: true)!

                let material = SCNMaterial()
                material.diffuse.contents = imagesOne
                material.diffuse.wrapT = SCNWrapMode.repeat
                material.diffuse.wrapS = SCNWrapMode.repeat
                material.isDoubleSided = true

                let transform = hitTestResult.worldTransform
                let thirdColumn = transform.columns.3

                node.scale = SCNVector3(x: 0.008, y: 0.008, z: 0.008)

                node.pivot = SCNMatrix4MakeTranslation(0, -0.5, 0)

                node.position = SCNVector3(thirdColumn.x, thirdColumn.y, thirdColumn.z)

                //rotation added
                let action = SCNAction.rotateBy(x: 0, y: CGFloat(2 * Double.pi), z: 0, duration: 15)
                let repAction = SCNAction.repeatForever(action)
                node.runAction(repAction, forKey: "myrotate")

                self.sceneView.scene.rootNode.addChildNode(node)
            }
            catch{
                print(error)
            }

        }

    }

1 Ответ

1 голос
/ 03 марта 2020

От: https://developer.apple.com/documentation/foundation/urlsession/1411554-datatask

URLSession.shared.dataTask(with:)

возвращает объект URLSessionTask, который имеет свойство .progress

https://developer.apple.com/documentation/foundation/urlsessiontask/2908821-progress

...