首页 > 解决方案 > 在 CoreML VNCoreMLRequest 之前触发时,ActivityIndi​​cator 不显示

问题描述

我正在使用快速的 ActivityIndi​​cator:https ://github.com/ninjaprox/NVActivityIndi​​catorView

func runMLModel(image: CIImage, completion: @escaping ([MLMultiArray]) -> Void){
     let request = VNCoreMLRequest(model: myModel) { (request, error) in
            guard let results = request.results as? [VNCoreMLFeatureValueObservation] else {
                fatalError("Model failed to process image")
            }
            //Do work here get mlData var
            completion(mlData)
        }

        let handler = VNImageRequestHandler(ciImage: image)

        do {
            try handler.perform([request])
        }catch {
            print(error)
        }
}

func buttonPressedToDoMLWork(){

     self.startAnimating(CGSize(width: 200, height: 200), message: "loading", type: NVActivityIndicatorType.audioEqualizer)  
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) {
        NVActivityIndicatorPresenter.sharedInstance.setMessage("Authenticating...")

    }
    // Activity Indicator should be showing up here
    // but nothing is displayed
    runMLModel(image: myImage, completion: { (mlData : [MLMultiArray]) in

            print("got data")

            //indicator only shows up NOW.. after printing
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
                self.stopAnimating(nil)

            }        
        })
    }
}

CoreML 模块中的代码似乎覆盖了在主 DispatchQueue 上启动 NVAcitivityIndi​​catorPresenter 的重要性。

无论如何要在 MLRequest 被触发之前显示这个该死的指标?

标签: iosswiftgrand-central-dispatchuiactivityindicatorviewcoreml

解决方案


将您的 rumMlmodel 放入延迟函数中,不要在异步任务中添加活动代码。之后它将显示您的活动。延迟应该在 0.4 - 0.6 左右


推荐阅读