Najlepszym sposobem na uzyskanie animacji w komórce UICollectionView
jest nadpisanie jej układu UICollectionViewLayout
. Ma metodę, która zwróci atrybuty układu komórki, którą chcesz wyświetlić/wstawić/usunąć.
Na przykład: Stworzyłem klasę KDCollectionViewFlowLayout
dziedzicząc UICollectionViewFlowLayout
i zastąpiłem atrybut delete.
class KDCollectionViewFlowLayout: UICollectionViewFlowLayout {
override func finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
let attribute = super.finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath)
attribute?.transform = CGAffineTransformTranslate(attributes.transform, 0, ITEM_SIZE)
attribute?.alpha = 0.0
return attribute
}
}
Teraz trzeba przypisać przedmiot niniejszego FlowLayout do widoku kolekcji w obu viewDidLoad lub można przypisać go poprzez storyboard.
let flowLayout = KDCollectionViewFlowLayout()
self.collectionView?.setCollectionViewLayout(flowLayout, animated: true)
Teraz wszystko jest gotowe do transformacji komórki której zdefiniowano by finalLayoutAttributesForDisappearingItemAtIndexPath
metody kiedy tylko wykonać jakąkolwiek operację usuwania na collectionView
.
Aktualizacja
Trzeba usunąć elementy z widoku kolekcji za pomocą operacji partii.
collectionView.performBatchUpdates({() -> Void in
//Array of the data which you need to deleted from collection view
let indexPaths = [NSIndexPath]()
//Delete those entery from the data base.
//TODO: Delete the information from database
//Now Delete those row from collection View
collectionView.deleteItemsAtIndexPaths(indexPaths)
}, completion:nil)
James Twoja aplikacja wygląda świetnie! –
James, czy kiedykolwiek działałeś tak, jak zamierzałeś? Chciałbym wdrożyć dokładnie ten sam typ funkcjonalności w Swift. Chciałbym zobaczyć twoją aplikację, jeśli pracujesz też! –