在我的UIImageView
子類中,我有一個UIActivityIndicatorView
和功能,以下載定義爲這樣的圖像:斯威夫特UIActivityView stopAnimating()不工作
class FooUIImageView: UIImageView {
var activityIndicator: UIActivityIndicatorView {
let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .white)
activityIndicator.hidesWhenStopped = true
activityIndicator.center = CGPoint(x: self.frame.width/2, y: self.frame.height/2)
self.addSubview(activityIndicator)
return activityIndicator
}
func downloadImageFrom(url: URL, imageMode: UIViewContentMode) {
self.activityIndicator.startAnimating()
self.activityIndicator.stopAnimating()
contentMode = imageMode
if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) as? UIImage {
self.image = cachedImage
} else {
URLSession.shared.dataTask(with: url) { data, _, error in
guard let data = data, error == nil else { return }
DispatchQueue.main.async {
if let imageToCache = UIImage(data: data) {
self.activityIndicator.stopAnimating()
self.imageCache.setObject(imageToCache, forKey: url.absoluteString as NSString)
self.image = imageToCache
} else {
self.activityIndicator.stopAnimating()
self.image = nil
}
}
}.resume()
}
activityIndicator.stopAnimating()
}
}
當運行我的應用程序,該activityIndicator
啓動加載 - 然後將圖像最終顯示。但是,activityIndicator
仍然保持在屏幕上,並且不會消失。在我所稱的stopAnimating()
以上的地方,指標實際上都停止了動畫。如果我在調用它之後立即停止它,但它仍然存在,這特別令人困惑。
運行您的代碼,等待圖像加載,然後查看調試器中的視圖層次結構。然後更改屬性:'var activityIndicator:UIActivityIndicatorView = { // Same body }()'然後再看一遍。 –