使用 Swift 进行解析的 SDWebImage 实现

SDWebImage implementation in parse using Swift

我正在使用解析来检索我的图像和标签并将其显示在集合视图中。问题在于集合视图一次加载所有图像和标签,导致加载时间长且内存使用率高。我想我每次都会加载 10 个单元格,但是我被推荐使用 SDWebImage 来使应用程序更轻。但是我不知道如何使用 swift 进行解析来实现它。我怀疑我会在下面的这段代码中放一些代码

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("newview", forIndexPath: indexPath) as! NewCollectionViewCell
    let item = self.votes[indexPath.row]


    let gesture = UITapGestureRecognizer(target: self, action: Selector("onDoubleTap:"))
    gesture.numberOfTapsRequired = 2
    cell.addGestureRecognizer(gesture)


    // Display "initial" flag image
    var initialThumbnail = UIImage(named: "question")
    cell.postsImageView.image = initialThumbnail

    // Display the country name
    if let user = item["uploader"] as? PFUser{
        item.fetchIfNeeded()
        cell.userName!.text = user.username


        var profileImgFile = user["profilePicture"] as! PFFile
        cell.profileImageView.file = profileImgFile
        cell.profileImageView.loadInBackground { image, error in
            if error == nil {
                cell.profileImageView.image = image
            }
        }

        var sexInt = user["sex"] as! Int
        var sex: NSString!
        if sexInt == 0 {
            sex = "M"
        }else if sexInt == 1{
            sex = "F"
        }

        var height = user["height"] as! Int
        cell.heightSexLabel.text = "\(sex) \(height)cm"



    }

    if let votesValue = item["votes"] as? Int
    {
        cell.votesLabel?.text = "\(votesValue)"
    }

    // Fetch final flag image - if it exists
    if let value = item["imageFile"] as? PFFile {
        println("Value \(value)") 
        cell.postsImageView.file = value
        cell.postsImageView.loadInBackground({ (image: UIImage?, error: NSError?) -> Void in
            if error != nil {
                cell.postsImageView.image = image
            }
        })
    }

    return cell
}

我已经使用 Pods 实现了 SDWebImage 并通过桥接头导入。有没有人知道如何使用Swift解析实现SDWebImage?

集合视图中显示了多少个对象? 既然你提到了SDWebImage,你也在后台下载图片吗?

如果您想在用户滚动时加载图像,请查看 SDWebImage 的文档。 first use case 描述了如何在不阻塞主线程的情况下在 table 视图单元格中显示图像。集合视图单元格的实现应该类似。

你应该重新考虑你的方法 -

我相信您正在使用 collectionViewDelegate 方法 - collectionView(_:cellForItemAtIndexPath:)

每次集合视图需要一个视图来处理时都会触发。

在那里您可以访问单元格 imageView 并设置其图像(例如)-

cell.imageView.sd_setImageWithURL(url, placeholderImage:placeHolderImage, completed: { (image, error, cacheType, url) -> Void in  })

如果你想很好地淡入图像,你可以 -

cell.imageView.sd_setImageWithURL(url, placeholderImage:placeHolderImage, completed: { (image, error, cacheType, url) -> Void in
            if (cacheType == SDImageCacheType.None && image != nil) {
                imageView.alpha = 0;
                UIView.animateWithDuration(0.0, animations: { () -> Void in
                    imageView.alpha = 1
                })
            } else {
                imageView.alpha = 1;
            }
        })

编辑

我看到你使用 Parse,所以你不需要 SDWebImage,你需要使用 Parse - PFImageView,它将在加载图像时处理图像的后台提取。您需要保存对 PFObject 的引用,但我相信您已经这样做了。

例如(在您的 cellForItemAtIndexPath 内)-

imageView.image = [UIImage imageNamed:@"..."]; // placeholder image
imageView.file = (PFFile *)someObject[@"picture"]; // remote image

[imageView loadInBackground];