2015-10-23 30 views
5

utworzonego aplikacji z UICollectionView jak ten obraz:Przesuwanie animacji operacje usuwania komórek, w UICollectionView - szybkie 2,0

enter image description here

Dodano dwa gestów

Pierwszy (w górę) usunie komórkę.

Druga (w dół) zaktualizuje komórkę (pobierz nowe dane z CoreData). Funkcje działają dobrze, ale nie ma animacji. iOS ma bardzo fajną animację przeciągającą komórkę i komórka znika.

Jestem początkujący w animacjach szybkich, więc jestem trochę zagubiony, kiedy to.

Moje pytanie brzmi: Jak dodać animację, która zajmuje całą komórkę?

Przeczytałem niektóre odpowiedzi na stronie, ale wszystkie w Object-C (like this).

Czy ktoś może mi pomóc?

+0

James Twoja aplikacja wygląda świetnie! –

+0

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ż! –

Odpowiedz

12

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) 
+0

W pierwszej kolejności próbowałem dopasować kod, ale się nie udało. Mój kod jest podzielony na trzy: klasa i dwa rozszerzenia. [link] (http://i.stack.imgur.com/DHIQE.png) Jak mogę dopasować jego przykład do mojego kodu? Jestem bardziej zdezorientowany niż początkowo ... – James

+0

Przepraszam, ale nie pracowałem tutaj, możesz opublikować link, by pobrać przykład, dla mnie, aby zobaczyć w praktyce, jak wszystko zorganizowałeś? – James

+0

@ James, Perfect [przykładowy kod] (https://github.com/mrzedese/CircleLayout) w celu usunięcia animacji. – deoKasuhal