使用Swift解析SDWebImage实现

时间:2015-08-08 12:30:57

标签: ios swift parse-platform uicollectionview sdwebimage

我使用解析来检索我的图像和标签并将其显示在集合视图上。问题是集合视图一次加载所有图像和标签,使加载时间变长,内存使用率很高。我想我每次都会加载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
}

我使用Pod实现了SDWebImage,并通过Bridging Header导入。有没有人知道如何使用Swift实现SDWebImage解析?

2 个答案:

答案 0 :(得分:3)

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

我相信您正在使用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];

答案 1 :(得分:0)

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

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