UICollectionView 中的性能问题
Performance issue in UICollectionView
我有一个 UICollectionView
,其项目包含一个 imageview
,我正在对其应用 CIFilters。因此生成了大约 12 个项目,但是当我在集合视图中滚动项目时,在生成新项目时会出现一些小故障。
有什么方法可以配置 UICollectionView
的项目而不会有这种延迟。
目前我正在 UICollectionView
的 cellForItemAtIndexPath
委托方法中应用过滤器。
// filters array
let arrayOfCIFilters = ["CIBumpDistortionLinear","CIPixellate","CISepiaTone","CITwirlDistortion","CIUnsharpMask","CIVignette","CIPhotoEffectNoir","CIColorInvert","CIMotionBlur","CIColorClamp","CIToneCurve","CIColorPosterize","CICircularScreen"]
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("c1", forIndexPath: indexPath) as! filterImagesCollectionViewCell
let ciImage = CIImage(image:originalImage)
ciFilter = CIFilter(name: arrayOfCIFilters[indexPath.row])!
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
cell.imageVIew.image = UIImage(CGImage: ciContext.createCGImage(ciFilter.outputImage!, fromRect: ciFilter.outputImage!.extent))
cell.nameLabel.text = arrayOfCIFilters[indexPath.row]
return cell
}
每次查看单元格时,您都会生成 CIImage、CIFilter、UIImage。请记住,只要单元格当前正在显示,就会调用 cellForItemAtIndexPath,因此当用户滚动并返回时,将再次执行此函数。
您应该在 init() 方法中创建一次所有图像并将它们保存在数组中。然后在此函数中使用该图像来显示它们。
我有一个 UICollectionView
,其项目包含一个 imageview
,我正在对其应用 CIFilters。因此生成了大约 12 个项目,但是当我在集合视图中滚动项目时,在生成新项目时会出现一些小故障。
有什么方法可以配置 UICollectionView
的项目而不会有这种延迟。
目前我正在 UICollectionView
的 cellForItemAtIndexPath
委托方法中应用过滤器。
// filters array
let arrayOfCIFilters = ["CIBumpDistortionLinear","CIPixellate","CISepiaTone","CITwirlDistortion","CIUnsharpMask","CIVignette","CIPhotoEffectNoir","CIColorInvert","CIMotionBlur","CIColorClamp","CIToneCurve","CIColorPosterize","CICircularScreen"]
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("c1", forIndexPath: indexPath) as! filterImagesCollectionViewCell
let ciImage = CIImage(image:originalImage)
ciFilter = CIFilter(name: arrayOfCIFilters[indexPath.row])!
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
cell.imageVIew.image = UIImage(CGImage: ciContext.createCGImage(ciFilter.outputImage!, fromRect: ciFilter.outputImage!.extent))
cell.nameLabel.text = arrayOfCIFilters[indexPath.row]
return cell
}
每次查看单元格时,您都会生成 CIImage、CIFilter、UIImage。请记住,只要单元格当前正在显示,就会调用 cellForItemAtIndexPath,因此当用户滚动并返回时,将再次执行此函数。
您应该在 init() 方法中创建一次所有图像并将它们保存在数组中。然后在此函数中使用该图像来显示它们。