ios - 在 CoreML VNCoreMLRequest 之前触发时,ActivityIndicator 不显示
问题描述
我正在使用快速的 ActivityIndicator:https ://github.com/ninjaprox/NVActivityIndicatorView
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 上启动 NVAcitivityIndicatorPresenter 的重要性。
无论如何要在 MLRequest 被触发之前显示这个该死的指标?
解决方案
将您的 rumMlmodel 放入延迟函数中,不要在异步任务中添加活动代码。之后它将显示您的活动。延迟应该在 0.4 - 0.6 左右
推荐阅读
- c - 为什么我的程序可以使用 for 但现在使用 while 循环?
- node.js - 为什么需要在 Linux 上才能在 Nodejs 上构建网站并做出反应?
- c# - 当我想获得输入时出现错误
- python-3.x - 尝试使用音乐数据进行迁移学习
- python - 如何在 python 3.8 中安装 opencv-python
- javascript - ReferenceError:“未定义 Swal”
- python - 在谷歌 colab 中从 spacy 中移出
- c++ - 数组何时自动初始化为其默认数据类型?
- python - 单调序列中的索引问题
- python - 如何创建一个新列,其值是现有 ByteArray 列的十六进制字符串?