Проведите анимацию для удаления ячейки в UICollectionView-Swift 2.0

Я создал приложение с UICollectionView такой образ:

enter image description here

добавлены два жесты:

первый (вверх) удалит ячейку.

второй (вниз) обновит ячейку (возьмите новые данные CoreData). Функции работают нормально, но анимации нет. iOS имеет очень классную анимацию, перетаскивая ячейку вверх, и ячейка исчезает.

Я новичок в анимации swift, поэтому я немного потерялся, когда он.

мой вопрос: Как я могу добавить анимацию, которая занимает всю клетку?

Я прочитал некоторые ответы на сайте, но все в Object-C (такой).

может кто-нибудь помочь мне?

1 ответов


лучший способ достичь анимации на ячейке UICollectionView переопределяет его макет UICollectionViewLayout. Его метод имеет, который вернет атрибуты макета ячейки, которые вы хотите либо показать/вставить/удалить.

например: я создал класс KDCollectionViewFlowLayout наследование UICollectionViewFlowLayout и переопределить атрибут 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

    }
}

теперь вам нужно назначить объект этого flowLayout представлению коллекции в viewDidLoad или вы можете назначить его через раскадровка.

let flowLayout = KDCollectionViewFlowLayout()
self.collectionView?.setCollectionViewLayout(flowLayout, animated: true)

теперь вы все настроены на преобразование ячейки, которую вы определили в finalLayoutAttributesForDisappearingItemAtIndexPath метод всякий раз, когда вы выполняете любую операцию удаления на collectionView.

обновление

вам нужно удалить элементы из представления коллекции с помощью пакетной операции.

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)