具有UIimageView高度的动态collectionView

时间:2017-05-17 17:05:55

标签: swift3 uiimageview uicollectionview flowlayout

我想使用swift 3在collectionView中显示像https://www.pinterest.com这样的图像。为此,图像来自后端,只有URL而不是图像大小。所以我想根据图像的高度动态显示单元格。

我在做什么,

        let url = self.myArray[indexPath.row].image
        let data = NSData(contentsOf:URL(string: url)!)
        var photo = UIImage()

        if (data?.length)! > 0 {
            photo = UIImage(data:data! as Data)!
        }

        let boundingRect =  CGRect(x: 0, y: 0, width: width, height: CGFloat(MAXFLOAT))
        let rect  = AVMakeRect(aspectRatio: photo.size, insideRect: boundingRect)

        return rect.size.height

它让我恢复了高度。

问题是:图像是HD,最大3MB。

        let data = NSData(contentsOf:URL(string: url)!)

需要花费很多时间,因为我有20到30张图片。

有没有办法在另一个线程而不是主线程上下载图像,因此下载图像将在后台继续,

任何人都有更好的解决方案来计算网址图片的高度。

PS:我已关注https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest了解customLayout。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你应该研究Alamofire。它使用promises异步发出请求,而不需要阻止UI线程。您的代码看起来像这样

Alamofire.request(URL_STRING, method: .get, parameters: nil, encoding: URLEncoding.default, headers: getHeaders())
                .validate()
                .responseImage(completionHandler: {response in
                    switch response.result {
                    case .success:
                        //The image will be stored in response.data in NSData format
                        break
                    case .failure(let error):
                        //Handle errors over here
                        break
                    }
                })