iOS集合视图延迟

时间:2019-02-22 13:38:09

标签: swift image uicollectionview responsiveness

在我的应用程序中,我正在使用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)
        }
    }
}
}

当我滚动到底部之后,一切都变得如丝般顺滑,最初使我相信这是导致问题的图像加载。我在这里做什么错了?

0 个答案:

没有答案