我有一个CollectionView,其图像应该从网络加载。
URL是字符串数组,而collectionView单元格中是imageView。
我找到了这段代码:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ViewCell
var url = NSURL(string: "\(array[indexPath.row])")
var err: NSError?
var imageData: NSData = NSData(contentsOfURL: url!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
var bgImage = UIImage(data:imageData)
cell.imgView.image = bgImage
// cell.imgView.image = UIImage(named: array[indexPath.row])
cell.load.hidden = false
cell.load.startAnimating()
cell.load.hidesWhenStopped = true
if cell.imgView.image == nil {
cell.load.startAnimating()
}else{
cell.load.stopAnimating()
}
return cell
}
问题出现在刚开始时。 应用程序已加载,我在我的MainVC(使用collectionView)中看到了println的一些内容,但在ipad上它只是frezen启动屏幕。
我试图将入口指向另一个视图并且它工作正常,直到我转向MainVC,一切都只是frize并且没有任何接触。
这有什么不妥?
感谢您的帮助!
答案 0 :(得分:2)
这是因为您正在下面代码行的主线程上加载图像。
var imageData: NSData = NSData(contentsOfURL: url!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
以异步方式下载图像,并在下载图像后更新相应的单元格。
http://jamesonquave.com/blog/developing-ios-apps-using-swift-part-5-async-image-loading-and-caching/