在使用UIImageView在UITableView上显示图像之前,我使用以下方法将图像转换为灰度:
extension UIImage {
var noir: UIImage? {
let contextForGrayscale = CIContext(options: nil)
guard let currentFilter = CIFilter(name: "CIPhotoEffectNoir") else { return nil }
currentFilter.setValue(CIImage(image: self), forKey: kCIInputImageKey)
if let output = currentFilter.outputImage,
let cgImage = contextForGrayscale.createCGImage(output, from: output.extent) {
return UIImage(cgImage: cgImage, scale: scale, orientation: imageOrientation)
}
return nil
}
}
由于我使用UIImageView在UITableView中显示这些图像,所以随着用户滚动,每个图像都被灰度化。在我的iPhone 13上,性能似乎非常好,我没有看到任何延迟。但是,我很好奇它在旧设备上的性能有多好。我没有旧设备,所以我无法测试它。
1.这是一个性能的方式灰度飞行和显示他们?有什么我可以做的,使它更好?
1.有没有办法让我的手机变慢来测试性能?有点像模拟旧设备?
1条答案
按热度按时间lf5gs5x21#
如果性能/内存压力看起来不是问题,我就不担心它。如果是问题,你可以使用
NSCache
。我会在扩展之外进行缓存,但为了代码示例:
另外,请参阅本文https://nshipster.com/image-resizing/除了创建新图像之外,您还可以创建一个大小适合显示图像视图的缩略图,并为此使用内置的缓存机制。这将保存一些内存和整体性能。但是,如果这不是问题,我更希望代码更简单,并且没有缓存!
哦,还有一件事。你可以使用这个https://developer.apple.com/documentation/uikit/uitableviewdatasourceprefetching在单元格显示之前异步地提前创建图像,这样当表要求给定索引路径的单元格时,它就准备好了。仔细想想,这可能是这里最简单/最好的解决方案。