【问题标题】:Performance issue in UICollectionViewUICollectionView 中的性能问题
【发布时间】:2016-09-06 17:03:53
【问题描述】:

我有一个UICollectionView,其项目包含一个imageview,我在其上应用CIFilters。因此,大约生成了 12 个项目,但是当我在集合视图中滚动项目时,生成新项目时会出现一些小故障。 有没有什么方法可以配置UICollectionView的项目而不会有这个延迟。

目前我在UICollectionViewcellForItemAtIndexPath委托方法中应用过滤器。

// 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                 
}

【问题讨论】:

    标签: swift uicollectionview uicollectionviewcell cifilter ciimage


    【解决方案1】:

    每次查看单元格时,您都会生成 CIImage、CIFilter、UIImage。请记住,只要当前显示单元格,就会调用 cellForItemAtIndexPath,因此当用户滚动并返回时,会再次执行此函数。

    您应该在 init() 方法中创建一次所有图像并将它们保存在数组中。然后在此函数中使用该图像来显示它们。

    【讨论】:

    • 如果我在 init() 方法中创建一个图像数组,该数组是否不会保存很多图像,因为我只有一个图像要过滤。
    • 是的,它将持有它。但这比每次都创建图像要好。当父控制器被清除时,这将被清除/垃圾收集,例如,如果您在 UIViewController 中显示 UICollectionView,那么当 UIViewController 被清除时,带有它的变量的 UICollectionView 也会被清除。
    • 肯定会有帮助!
    • 祝你好运。如果对您有帮助,请将答案标记为正确。
    猜你喜欢
    • 2012-09-15
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多