2013-10-09 18 views
16

Bazı ilginç animasyonlarla UICollectionView uygulamasını yeniden yüklemek istiyorum. UITableView'da reloadSections:withRowAnimation adlı bir yöntem var. Ancak UICollectionView'da sadece reloadSections var.UICollectionView reloadSections with animasyon

reloadSections animasyonunu nasıl özelleştirebilirim? Bunu App Store'daki uygulamalarda kesinlikle gördüm.

+0

[UICollectionView animasyon verileri değişiklik] olası çift (http://stackoverflow.com/questions/13272315/uicollectionview-animate-data-change) – Vinzzz

cevap

27

Sadece bunu böyle yapın:

[self.collectionView performBatchUpdates:^{ 
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; 
} completion:nil]; 
+1

sayesinde, ancak Hala bir solma animasyonuyla canlandırıyor ... – Sergey

+0

Sonra daha derine dalmak ve kendi '' UICollectionViewLayout''' yazmanız gerekiyor. UITableView ile karşılaştıramazsınız, çünkü UICollectionView sadece 1D (UITableView gibi) veya 2D (UICollectionViewFlowLayout'taki gibi) verileri görüntülemekten ibaret değildir. Hiçbir şeyle sınırlı kalmazsınız ve bu nedenle, yerleşik solmadan başka önemsiz animasyonlar yoktur. Animasyonların küresel olarak tanımlanamayacağı için, özel düzenlerin farklı slayt-yukarı/alt/orta animasyonlar kullanması mümkün değildir !!! – Fab1n

1

burada Bu makale okuma değer: http://victorlin.me/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue

TLDR:

yüzden çıktı performBatchUpdates CollectionView'ın çağırır (: numberOfItemsInSection :) önce öğe numaralarını bilmek için verilen kapanışı çağırır. Daha sonra, kapatmayı çağırır ve sonunda, sayıyı kontrol etmek için collectionView (: numberOfItemsInSection :) öğesini tekrar çağırır. Ve burada iddia edilen özel durum istisnadır.

14

Swift 3 versiyonu:

collectionView.performBatchUpdates({ 
    let indexSet = IndexSet(integer: 0) 
    self.collectionView.reloadSections(indexSet) 
}, completion: nil)