IOS - SWIFT - CollectionView - > ImageView加载URL图像

时间:2015-05-08 12:01:36

标签: ios swift imageview collectionview

我有一个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并且没有任何接触。

这有什么不妥?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是因为您正在下面代码行的主线程上加载图像。

var imageData: NSData = NSData(contentsOfURL: url!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!

以异步方式下载图像,并在下载图像后更新相应的单元格。

实施例: https://developer.apple.com/library/prerelease/ios/samplecode/LazyTableImages/Introduction/Intro.html

http://jamesonquave.com/blog/developing-ios-apps-using-swift-part-5-async-image-loading-and-caching/