我有UICollectionView
张图片,在每个单元格的一角有一个水印(或一个小图标)。图像是远程获取的,图标是硬编码的(本地)。除一个难看的问题外,其他所有东西都工作正常:本地水印图标在获取图像时先加载每个单元格,但外观不好。
--->我正在寻找一种在每个单元格填充后(或更糟的情况是,在所有单元格填充后)加载/显示水印图标(UIImageView
)的方法。感谢您的帮助!
1。。这可能吗? 2。。我将在哪里实现它:cellForItemAt
,viewDidLoad
等? 3。,然后输入代码。请注意,我是编码的新手。
这是我如何使用远程存储图像(不包括监听器)填充collectionView的方法:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myproductCell", for: indexPath) as! MyProductsCollectionCell
if (self.products.indices.contains(indexPath.row)) {
let product = self.products[indexPath.row]
cell.configureWithProduct(Product(caption: product.caption, videoUrl: product.videoUrl, imageUrl: product.imageUrl))
}
return cell
}
我刚刚为本地存储的水印(图标)创建了一个出口:
@IBOutlet weak var watermark: UIImageView!
答案 0 :(得分:0)
使用SDWebImage库。
首先使用cocoapods安装库
pod 'SDWebImage'
将SDWebImage库导入MyProductsCollectionCell
上方,并使用SDWebImage
提供的方法设置图像。
该库将处理异步下载,图像设置并将其缓存。
import SDWebImage
class MyProductsCollectionCell: UICollectionViewCell {
@IBOutlet weak var watermark: UIImageView!
// rest of your properties.
func configureWithProduct(_ product: Product) {
cell.watermark.sd_setImage(with: URL(string: product.imageUrl), placeholderImage: UIImage(named: "placeholder.png"))
// set values to the rest properties.
}
}
答案 1 :(得分:-1)
我没有看到您的代码,因此无法发表评论。但肯定不在viewDidLoad中。
您可以使用块在cellForItemAt中实现此功能。
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
// download the image on the background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// once you have the image downloaded,
// set the image on a main thread
// in the completion handler
dispatch_async(dispatch_get_main_queue, ^{
callback(yourImage); // this can be a call to your method.
});
});
}