Как загрузить / показать UIImageView в ячейке после заполнения ячейки - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть 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!

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Используйте библиотеку 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.
    }
}

0 голосов
/ 09 апреля 2019

Я не видел ваш код, поэтому я не могу комментировать.Но определенно нет в viewDidLoad.

Вы можете использовать блоки для реализации этого в cellForItemAt. * ​​1005 *

- (__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.
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...