2015-10-23 13 views
5

मैं UICollectionView इस छवि की तरह से कोई ऐप बनाया:UICollectionView में निकालें सेल के लिए स्वाइप एनिमेशन - स्विफ्ट 2.0

enter image description here

जोड़ा गया दो इशारों:

पहले (ऊपर) सेल मिटा देगा।

दूसरा (नीचे) सेल अपडेट करेगा (कोरडाटा का नया डेटा लें)। फ़ंक्शन ठीक काम करते हैं, लेकिन कोई एनीमेशन नहीं है। आईओएस में सेल को खींचने वाली बहुत अच्छी एनीमेशन है और सेल गायब हो जाता है।

मैं एनिमेशन में तेजी से शुरुआत कर रहा हूं, इसलिए जब मैं इसे खो देता हूं तो मैं थोड़ा खो जाता हूं।

मेरा प्रश्न है: मैं एक एनीमेशन कैसे जोड़ सकता हूं जो पूरे सेल को लेता है?

मैंने साइट पर कुछ जवाब पढ़े हैं, लेकिन ऑब्जेक्ट-सी (like this) में सभी।

क्या कोई मेरी मदद कर सकता है?

+0

जेम्स आपका ऐप शानदार दिखता है! –

+0

जेम्स, क्या आपने कभी यह काम किया है जैसा आपने इरादा किया था? स्विफ्ट में बिल्कुल उसी प्रकार की कार्यक्षमता को लागू करना चाहते हैं। अगर आप भी काम कर रहे हैं, तो अपने ऐप को देखना अच्छा लगेगा! –

उत्तर

12

UICollectionView की सेल अपने लेआउट UICollectionViewLayout अधिभावी है पर एनीमेशन प्राप्त करने के लिए सबसे अच्छा तरीका है। इसकी विधि है जो उस सेल के लेआउट विशेषताओं को वापस कर देगी जिन्हें आप या तो दिखाना/डालना/हटाना चाहते हैं।

उदाहरण के लिए: मैंने KDCollectionViewFlowLayout को UICollectionViewFlowLayout विरासत में मिला और हटाए गए गुण को ओवरराइड किया।

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

ठीक है, पहले उदाहरण में, मैंने अपने कोड में फिट करने की कोशिश की, लेकिन सफल नहीं हुआ। मेरा कोड तीन में बांटा गया है: एक वर्ग और दो एक्सटेंशन। [लिंक] (http://i.stack.imgur.com/DHIQE.png) मैं अपने कोड में अपना उदाहरण कैसे फिट करूं? मैं शुरुआत में अधिक उलझन में हूं ... – James

+0

क्षमा करें, लेकिन यहां काम नहीं किया है, आप मेरे उदाहरण को डाउनलोड करने के लिए एक लिंक पोस्ट कर सकते हैं, मेरे अभ्यास में यह देखने के लिए कि आपने सब कुछ कैसे व्यवस्थित किया है? हटाने के लिए – James

+0

@ जेम्स, बिल्कुल सही [नमूना कोड] (https://github.com/mpospese/CircleLayout)। – deoKasuhal

संबंधित मुद्दे