iOS Collection View Lagging - PullRequest
       14

iOS Collection View Lagging

0 голосов
/ 22 февраля 2019

В моем приложении я использую CollectionView для отображения некоторых изображений.Когда я начинаю прокручивать, производительность довольно плохая и возникают большие лаги.Я попытался использовать кэш изображений, чтобы изображения не перезагружались при каждом появлении ячейки.Я также попытался удалить закругленные края и использовать layer.shouldRasterize.Кажется, ничто не поможет.Изображения находятся в Активах Приложения.

let imageCache = NSCache<AnyObject, AnyObject>()

...

class MainMenuController: UIViewController, UICollectionViewDataSource, UICollectionViewDataSourcePrefetching, UICollectionViewDelegateFlowLayout {
@IBOutlet weak var collectionView: UICollectionView!
let reuseIdentifier = "cell"

override func viewDidLoad() {
    super.viewDidLoad()
    ....
}




//Collection View
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return items.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MainMenuCell


    cell.titleLabel.text = self.items[indexPath.item].getName()
    cell.titleLabel.textColor = ColorInterface.sharedInstance.ultra_textcolor

    if let imageFromCache = imageCache.object(forKey: items[indexPath.item].getKey() as AnyObject) as? UIImage {
        cell.imageView.image = imageFromCache
    }
    else
    {
        let imageToCache = UIImage(named: items[indexPath.item].getImage())!
        imageCache.setObject(imageToCache, forKey: items[indexPath.item].getKey() as AnyObject)
        cell.imageView.image = imageToCache
    }

    cell.layer.cornerRadius = 7

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let totalHeight: CGFloat = (collectionView.frame.width / 2)
    let totalWidth: CGFloat = (collectionView.frame.width / 2)

    return CGSize(width: ceil(totalWidth - 5),height: ceil(totalHeight - 5))
}

func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
    for index in indexPaths
    {
        if imageCache.object(forKey: items[index.item].getKey() as AnyObject) == nil
        {
            let imageToCache = UIImage(named: items[index.item].getImage())!
            imageCache.setObject(imageToCache, forKey: items[index.item].getKey() as AnyObject)
        }
    }
}
}

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

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