Ios 在UICollectionView中使用带有Xcode的资产目录管理800个映像

Ios 在UICollectionView中使用带有Xcode的资产目录管理800个映像,ios,xcode,swift,uiimage,uicollectionview,Ios,Xcode,Swift,Uiimage,Uicollectionview,我正在创建一个带有自定义图像的表情键盘,它有845个不同的图像(如果包括@1x、@2x和@3x,则为2535个)。在将它们作为资源导入Xcode之后,现在编译程序的速度非常慢,在iOS模拟器中显示键盘需要3秒钟 我使用UICollectionView显示表情也有问题:当我滚动时,它崩溃了。我试图将我的UICollectionViewCell约束为UIView,其背景是表情符号,这样我就不会创建UIImageView,但性能仍然很差 下面是我的cellForItemAtIndexPath()函数:

我正在创建一个带有自定义图像的表情键盘,它有845个不同的图像(如果包括@1x、@2x和@3x,则为2535个)。在将它们作为资源导入Xcode之后,现在编译程序的速度非常慢,在iOS模拟器中显示键盘需要3秒钟

我使用UICollectionView显示表情也有问题:当我滚动时,它崩溃了。我试图将我的UICollectionViewCell约束为UIView,其背景是表情符号,这样我就不会创建UIImageView,但性能仍然很差

下面是我的cellForItemAtIndexPath()函数:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as UICollectionViewCell
    let emoji = UIImage(named: emojiCollections[collectionUsed][positionInCollection]) // Creating the UIImage with the asset
    let emojiBackgroundColor = UIColor(patternImage: emoji!) // Set the background of the cell.
    positionInCollection++
    return cell
}
对于这些问题,我想知道管理这些数量的图像的最佳方法是什么,以及如何在UICollectionView中正确显示它们(即具有良好的滚动性能)


谢谢大家!

我假设您正在加载所有图像并将其存储在内存中,这是问题的根源。您应该动态加载表情符号图像,只有在需要时才加载。当您使用
UIImage(名称:…)
方法加载图像时,UIKit会为您进行缓存

对于
UICollectionView
,使用backgroundColor属性设置图像不是好的做法。使用
setBackgroundImage(image:UIImage)
方法创建
UICollectionViewCell
子类,该方法在
UIImageView
上设置图像。在子类中,还可以执行以下操作,以确保在重用单元格之前卸载旧图像

override func prepareForReuse() {
    super.prepareForReuse()
    imageView.image = nil
}

一边加载,一边避免资产目录有关缓存的部分,我应该在哪里使用
UIImage(名称:…)
加载图像?例如,在
viewdiload
中使用
UIImage
数组?我真的不明白如何使用UICollectionView动态加载图像。