我正在创建一个带有自定义图像的表情符号键盘,它有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中正确显示它们(即具有良好的滚动性能)。
谢谢!
答案 0 :(得分:1)
我假设您正在加载所有图像并将其存储在内存中,这是您问题的根源。您应该只在需要时动态加载表情符号图像。当您使用UIImage(named:...)
方法加载图像时,UIKit会为您进行缓存。
对于UICollectionView
,使用backgroundColor属性设置图像并不是一种好习惯。使用UICollectionViewCell
方法创建setBackgroundImage(image: UIImage)
子类,该方法将图像设置为UIImageView
。在子类中,您还可以执行以下操作以确保在重用单元格之前卸载旧图像。
override func prepareForReuse() {
super.prepareForReuse()
imageView.image = nil
}