我使用解析来检索我的图像和标签并将其显示在集合视图上。问题是集合视图一次加载所有图像和标签,使加载时间变长,内存使用率很高。我想我每次都会加载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解析?
答案 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描述了如何在表视图单元格中显示图像而不阻塞主线程。集合视图单元的实现应该类似。