Индикатор активности пользовательского интерфейса не отображается в viewcontroller, в котором он имеет табличное представление и веб-представление?
var actInd: UIActivityIndicatorView = UIActivityIndicatorView()
actInd.frame = CGRect(x: 0.0, y: 0.0, width: 40.0, height: 40.0)
actInd.center = view.center
actInd.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
view.addSubview(actInd)
getinfo()
actInd.startAnimating()
func getinfo(){
//in this function theres is few image parsing codes, for table view
for i in 0 ..< minuscurent1.count
{
let adict:NSDictionary = minuscurent1[i] as! NSDictionary
let bdict:NSDictionary = adict.object(forKey: "snippet") as! NSDictionary
let cdict:NSDictionary = bdict.object(forKey: "resourceId") as! NSDictionary
let ddict:NSDictionary = bdict.object(forKey: "thumbnails") as! NSDictionary
let edict:NSDictionary = ddict.object(forKey: "medium") as! NSDictionary
self.videolist.add(bdict.object(forKey: "title") as! String)
self.videoId.add(cdict.object(forKey: "videoId") as! String)
self.image.add(edict.object(forKey: "url") as! String)
}
DispatchQueue.main.async {
self.actInd.stopAnimating()
self.actInd.hidesWhenStopped = true
self.videotable.reloadData()
}
Я хочу, чтобы индикатор активности начинался с начала и заканчивал его, когда загружены все изображения и веб-представление. Но индикатор активности не отображается. Я не знаю, что не так с кодом. Любая помощь приветствуется...
1 ответ
Решение
Загрузка вашего изображения происходит в основном потоке, поэтому пользовательский интерфейс не обновляется. Вы должны выполнять тяжелую работу в фоновом потоке и обновлять индикатор активности только после того, как закончите.
DispatchQueue.global(qos: .background).async {
// Background Thread
// put your image loading here (for-loop)
DispatchQueue.main.async {
// Run UI Updates
self.actInd.stopAnimating()
self.actInd.hidesWhenStopped = true
self.videotable.reloadData()
}
}