2012-12-24 16 views
22

मैंने एक यूआईसीओलेक्शन व्यू बनाया है और आईफोन पर स्प्रिंगबोर्ड के संपादन मोड की तरह सभी सेल हिलाएं। मैंने अपना शेक कोड बनाया है लेकिन यह नहीं जानता कि इसे कैसे कार्यान्वित किया जाए। मेरे पास कस्टम सेल्स हैं इसलिए मुझे लगता है कि यह वहां जाता है लेकिन यह नहीं पता कि यह कैसे कार्यान्वित किया जाता है। धन्यवाद।UICollectionViewCell शेक

#define degreesToRadians(x) (M_PI * (x)/180.0) 
#define kAnimationRotateDeg 0.5 
#define kAnimationTranslateX 1.0 
#define kAnimationTranslateY 1.0 

//startJiggling 

int count = 1; 
CGAffineTransform leftWobble = CGAffineTransformMakeRotation(degreesToRadians(kAnimationRotateDeg * (count%2 ? +1 : -1))); 
CGAffineTransform rightWobble = CGAffineTransformMakeRotation(degreesToRadians(kAnimationRotateDeg * (count%2 ? -1 : +1))); 
CGAffineTransform moveTransform = CGAffineTransformTranslate(rightWobble, -kAnimationTranslateX, -kAnimationTranslateY); 
CGAffineTransform conCatTransform = CGAffineTransformConcat(rightWobble, moveTransform); 

    self.transform = leftWobble; // starting point 

    [UIView animateWithDuration:0.1 
          delay:(count * 0.08) 
         options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse 
        animations:^{ self.transform = conCatTransform; } 
        completion:nil]; 

उत्तर

12

क्या आप एक विधि अपने कस्टम सेल में startJiggling बुलाया में कोड रहे हैं डाल दिया है, तो आप अपने नियंत्रक में इस विधि कह सकते हैं:

[self.collectionView.visibleCells makeObjectsPerformSelector:@selector(startJiggling)];

कि सुनिश्चित करता है कि सभी दृश्य कोशिकाओं होगा जिगलिंग शुरू करो।

फिर मैं कुछ झंडा भी सेट करता हूं जो दर्शाता है कि आपकी कोशिकाओं को collectionView:cellForItemAtIndexPath: में इसके लिए जॉगल और परीक्षण करना चाहिए। यदि हां, तो अपनी विधि को कॉल करें।

+0

सभी को छोड़कर महान लेकिन पिछले सेल है कंपन। जब मैं दृश्यमान सेल गिनती मुद्रित करता हूं और सरणी इसे 1 तक बंद कर देती है। दृश्यमान सेल गणना कम होती है। कोई विचार? एनएसएलओजी (@ "दृश्यसेलसउंट% डी", self.collectionView.visibleCells.count); एनएसएलओजी (@ "पक्षियों काउंट% डी", self.birds.count); – BDGapps

+0

क्षमा करें, इसके लिए कोई विचार नहीं, बिना कोड के ... – fguchelaar

+0

लेकिन सभी कोशिकाएं दिखाई दे रही हैं? या क्या आपको अंतिम के लिए स्क्रॉल करना है? – fguchelaar

1

प्लेस में दो स्थानों पर कोड की इस पंक्ति:

[self.collectionView.visibleCells makeObjectsPerformSelector:@selector(startJiggling)];  
  1. -(void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath

  2. -(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

2

अगर कोई कैसे स्विफ्ट 2.0 में यह करने के लिए पर उत्सुक है नीचे एक अच्छा प्रारंभिक बिंदु होना चाहिए।

let animationRotateDegres: CGFloat = 0.5 
let animationTranslateX: CGFloat = 1.0 
let animationTranslateY: CGFloat = 1.0 
let count: Int = 1 

func wobble() { 
    let leftOrRight: CGFloat = (count % 2 == 0 ? 1 : -1) 
    let rightOrLeft: CGFloat = (count % 2 == 0 ? -1 : 1) 
    let leftWobble: CGAffineTransform = CGAffineTransformMakeRotation(degreesToRadians(animationRotateDegres * leftOrRight)) 
    let rightWobble: CGAffineTransform = CGAffineTransformMakeRotation(degreesToRadians(animationRotateDegres * rightOrLeft)) 
    let moveTransform: CGAffineTransform = CGAffineTransformTranslate(leftWobble, -animationTranslateX, -animationTranslateY) 
    let conCatTransform: CGAffineTransform = CGAffineTransformConcat(leftWobble, moveTransform) 

    transform = rightWobble // starting point 

    UIView.animateWithDuration(0.1, delay: 0.08, options: [.AllowUserInteraction, .Repeat, .Autoreverse], animations: {() -> Void in 
     self.transform = conCatTransform 
     }, completion: nil) 
} 

func degreesToRadians(x: CGFloat) -> CGFloat { 
    return CGFloat(M_PI) * x/180.0 
} 

जब मैं अपने कोशिकाओं बनाना चाहते लड़खड़ा मैं इस तरह ऐसा:

for cell in collectionView.visibleCells() { 
     let customCell: MyCustomCell = cell as! MyCustomCell 
     customCell.wobble() 
    } 
+0

यह तब काम करता था जब मैंने सामग्री दृश्य में परिवर्तन लागू किया था। तो: self.contentView.transform = conCatTransform। – c0d3Junk13

+0

मेरे लिए सही काम करता है !! – garanda

0

तेज 3 वाक्य रचना को अपडेट किया गया:

let animationRotateDegres: CGFloat = 0.5 
let animationTranslateX: CGFloat = 1.0 
let animationTranslateY: CGFloat = 1.0 
let count: Int = 1 

func wobble() { 
    let leftOrRight: CGFloat = (count % 2 == 0 ? 1 : -1) 
    let rightOrLeft: CGFloat = (count % 2 == 0 ? -1 : 1) 
    let leftWobble: CGAffineTransform = CGAffineTransform(rotationAngle: degreesToRadians(x: animationRotateDegres * leftOrRight)) 
    let rightWobble: CGAffineTransform = CGAffineTransform(rotationAngle: degreesToRadians(x: animationRotateDegres * rightOrLeft)) 
    let moveTransform: CGAffineTransform = leftWobble.translatedBy(x: -animationTranslateX, y: -animationTranslateY) 
    let conCatTransform: CGAffineTransform = leftWobble.concatenating(moveTransform) 

    transform = rightWobble // starting point 

    UIView.animate(withDuration: 0.1, delay: 0.08, options: [.allowUserInteraction, .autoreverse], animations: {() -> Void in 
     self.transform = conCatTransform 
    }, completion: nil) 
} 

func degreesToRadians(x: CGFloat) -> CGFloat { 
    return CGFloat(M_PI) * x/180.0 
} 
+0

इसका उपयोग कैसे करें ????????????? @ user12345625 –

+0

ईजी। कोड को एक कस्टम UICollectionViewCell में रखें और जब आपको सेल को हिलाने की आवश्यकता हो तो wobble फ़ंक्शन को कॉल करें। – user12345625

+0

मैंने इसे जागृत किया है FromNib लेकिन केवल एक बार कॉल करें @ user12345625 –

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