Ich habe eine UICollectionView (horizontal) und putted dort in Zellen Bilder mit angewendeten Filtern.Wie wird das gefilterte Bild im Array gespeichert?
Ich tue dies:
var filtered = [Int: UIImage]()
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("filterCell", forIndexPath: indexPath) as! filterCell
let op1 = NSBlockOperation {() -> Void in
let img = self.image!
let img1 = self.applyFilterTo(img, filter: self.filtersImages[indexPath.row])
NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in
if let filtered = self.filtered[indexPath.row] {
cell.imageView.image = self.filtered[indexPath.row]
} else {
self.filtered[indexPath.row] = img1
cell.imageView.image = self.filtered[indexPath.row]
}
})
}
self.queue!.addOperation(op1);
return cell
}
wo:
var myFilter = CIFilter()
func applyFilterTo(image: UIImage, filter: String) -> UIImage {
let sourceImage = CIImage(image: image)
myFilter = CIFilter(name: filter)!
myFilter.setDefaults()
myFilter.setValue(sourceImage, forKey: kCIInputImageKey)
let context = CIContext(options: nil)
let outputCGImage = context.createCGImage(myFilter.outputImage!, fromRect: myFilter.outputImage!.extent)
let newImage = UIImage(CGImage: outputCGImage, scale: image.scale, orientation: image.imageOrientation)
return newImage
}
So das Prinzip hier bewirbt ich meinen Filter auf das Bild, es in meinem Wörterbuch speichern und später auf Scroll-Last Bilder aus dem Wörterbuch . Aber es braucht immer noch Bilder, wendet Filter an und zeigt es später. Also beim Scrollen meine UICollectionView friert ein, Filter auf Bildern ändern sich.
Was mache ich falsch und wie kann ich das beheben?