2013-10-09 9 views
16

के साथ क्रियाएं मैं कुछ दिलचस्प एनीमेशन के साथ UICollectionView को फिर से लोड करना चाहता हूं। UITableView में reloadSections:withRowAnimation नामक एक विधि है। लेकिन UICollectionView में केवल reloadSections है।UICollectionView रीलोड एनीमेशन

मैं रीलोडक्शन एनीमेशन को कैसे अनुकूलित कर सकता हूं? मैंने निश्चित रूप से इसे ऐप स्टोर पर ऐप्स में देखा है।

+0

[UICollectionView चेतन डेटा परिवर्तन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/13272315/uicollectionview-animate-data-change) – Vinzzz

उत्तर

27

बस ऐसे ही यह कार्य करें:

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

धन्यवाद, लेकिन यह अभी भी एक फीका एनीमेशन के साथ एनिमेट करता है ... – Sergey

+0

फिर आपको गहराई से गोता लगाने और अपना खुद का '' 'UICollectionViewLayout''' लिखना होगा। आप इसे UITableView से तुलना नहीं कर सकते हैं, क्योंकि UICollectionView केवल 1 डी (जैसे UITableView) या 2D (जैसे UICollectionViewFlowLayout के साथ) में डेटा प्रदर्शित करने के लिए मानसिक नहीं है। आप किसी भी चीज़ तक सीमित नहीं हैं और इसलिए निर्मित फीडिंग के अलावा कोई छोटा एनिमेशन नहीं है। कस्टम लेआउट के लिए विभिन्न स्लाइड-टू-टॉप/नीचे/मध्य एनिमेशन का उपयोग करना संभव नहीं है, क्योंकि एनिमेशन को विश्व स्तर पर परिभाषित नहीं किया जा सकता है !!! – Fab1n

1

यहाँ इस लेख पढ़ने लायक है: http://victorlin.me/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue

TLDR:

तो यह पता चला performBatchUpdates कॉल collectionView (: numberOfItemsInSection :) आइटम नंबरों को जानने के लिए दिए गए बंद कॉल को कॉल करने से पहले। इसके बाद, यह बंद करने को कॉल करता है, और अंततः, यह संख्या देखने के लिए संग्रह दृश्य (: numberOfItemsInSection :) कहता है। और यहां वह जगह है जहां दावा अपवाद फेंक दिया गया है।

14

स्विफ्ट 3 संस्करण:

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