Предварительный просмотр коллекции (чтобы прокрутка была плавной) - PullRequest
0 голосов
/ 05 ноября 2018

Я хотел бы иметь возможность предварительно загрузить элементов в моем представлении коллекции, когда он прокручивается вверх и вниз.

Я использую данные двух массивов для загрузки данных в представлении сбора:

(1) availableLabelNames: [String] (2) availableImageNames: [String]

Коллекция Просмотр функций в AvailableImages:

class availableImages: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource
{

@IBOutlet weak var searchBar: UISearchBar!

@IBOutlet weak var collectionView: UICollectionView!

public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
    return availableLabelNames.count
}

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as! CustomCollectionViewCell
    cell.borderFolder.layer.borderColor = UIColor.black.cgColor
    cell.borderFolder.layer.borderWidth = 2
    cell.borderFolder.layer.cornerRadius = 5

    cell.squareDesign.layer.cornerRadius = 5

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(availableImages.connected(_:)))
    cell.imageCell.isUserInteractionEnabled = true
    cell.imageCell.tag = indexPath.row
    cell.imageCell.addGestureRecognizer(tapGestureRecognizer)

    //setting image
    cell.imageCell.image = UIImage(named: availableImageNames[indexPath.row])

    //setting label
    cell.labelName.text = availableLabelNames[indexPath.row]

    return cell
}
}

Класс просмотра пользовательской коллекции:

import UIKit

protocol Normal: class
{
    func delete (cell: CustomCollectionViewCell)

    func pressed (cell: CustomCollectionViewCell)

    func textChanged (cell: CustomCollectionViewCell)

    func finishedEditing (cell: CustomCollectionViewCell)

    func textStartedEditing (cell: CustomCollectionViewCell)
}

class CustomCollectionViewCell: UICollectionViewCell
{
    @IBOutlet weak var imageCell: UIImageView!
    @IBOutlet weak var deleteButton: UIButton!
    @IBOutlet weak var cellButton: UIButton!
    @IBOutlet weak var labelName: UILabel!
    @IBOutlet weak var textFieldName: UITextField!
    @IBOutlet weak var squareDesign: UIView!
    @IBOutlet weak var borderFolder: UIView!

    weak var delegate: Normal?

    //...class goes on but not important

Пожалуйста, кто-нибудь может мне помочь. Я смотрел везде, но, похоже, ничего не работает и не имеет смысла с точки зрения моего заявления. Спасибо вам большое! :)

1 Ответ

0 голосов
/ 05 ноября 2018

Представление коллекции по умолчанию выполняет предварительную загрузку. Ваша проблема в другом месте, вы не можете выполнять тяжелую работу в ячейке за предмет.

Нужен пример проекта, чтобы попробовать его, но держу пари, что это корень проблемы:

cell.imageCell.image = UIImage(named: availableImageNames[indexPath.row])

переписать это так:

DispatchQueue.main.async { [weak self] in
    guard let weakSelf = self else { return }
    cell.imageCell.image = UIImage(named: weakSelf.availableImageNames[indexPath.row])
}

Кроме того, при повторном использовании ячеек вы хотите сбросить их изображение. В противном случае изображения будут отображаться в случайном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...