2011-11-25 8 views
13

समाप्त हो गया है तो मैं कोड की इस पंक्ति है:एक कार्य (आईओएस में) प्रदर्शन के बाद एनीमेशन

[tableView setContentOffset:point animated:YES];

और मैं के बाद एनीमेशन समाप्त होता है एक और कोड चलाना चाहते हैं। मेरे प्रयास एक अलग विधि में animating कोड (setContentOffset) फेंक और का उपयोग कर इसे बुला लिए किया गया था:

[self performSelectorOnMainThread:@selector(scrollMethod:) withObject:sender waitUntilDone:YES];

समस्या यह है कि विधि तुरंत देता है, हाँ नहीं के बाद एनीमेशन समाप्त हो गया है, भले ही waitUntilDone है , लेकिन जाहिर है कि एनीमेशन कैसे काम करता है।

मुझे पता है कि मैं थ्रेड का इंतजार कर सकता हूं लेकिन यह साफ़ नहीं है, इसलिए मैं इसे केवल अंतिम उपाय के रूप में उपयोग करूंगा। (हो सकता है कि अगर मैं स्क्रॉलिंग एनीमेशन होने के समय को जानता हूं तो शायद मैं इसका इस्तेमाल करूंगा।)

इस बारे में कोई विचार है कि इस बारे में कैसे जाना है।

(पीएस परिदृश्य यह है: मैं एक पॉपओवर दिखा रहा हूं, जब कोई कीबोर्ड नहीं है, तो कीबोर्ड पूरी तरह से प्रदर्शित होता है, हालांकि, यदि कीबोर्ड दिखाई देता है, तो पॉपओवर की ऊंचाई कम हो जाती है जो कभी-कभी इसे लगभग सीमा तक ही कम कर देती है। तो बस पॉपओवर दिखाने से पहले, मैं ऊपर की तरफ देखने स्क्रॉल करने के लिए इतना है कि पॉपओवर कभी नहीं कुंजीपटल में दिखाई दे चाहते हैं)

उत्तर

24

कोशिश इस विधि का उपयोग करने के लिए:।

[UIView animateWithDuration:0.6f 
         delay:0.0f 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        // Do your animations here. 
       } 
       completion:^(BOOL finished){ 
        if (finished) { 
         // Do your method here after your animation. 
        } 
       }]; 
+0

इसका उत्तर देने जा रहा था ... मुझे आश्चर्य है कि यह तालिका के साथ हस्तक्षेप करेगा हालांकि एनिमेशन देखें। – SpacyRicochet

+0

हाय @ स्पेसी रिकोशेट मैंने अभी कोशिश की, और यह या तो काम करता है। :) – Kjuly

+0

फिर मेरा नया उत्तर अभी भी शैक्षणिक उद्देश्यों के लिए उपयोगी है :) – SpacyRicochet

35

UITableView विरासत setContentOffset: एनिमेटेड: अपने सुपर क्लास से, UIScrollView। ScrollViewDidEndScrollingAnimation: UIScrollViewDelegate की विधि देखें।

+4

+1। – Till

+0

धन्यवाद लूट। इस सरल विधि के लिए +1। – mrd3650

0

आप एनिमेशन बना सकते हैं और उन्हें पूरा करने के बाद उन्हें ब्लॉक करने के लिए सीधे बता सकते हैं।

यहां एक विकल्प है जो UITableView के एनिमेशन के साथ अच्छा खेल सकता है।

[UIView beginAnimations:nil context:sender]; 
[UIView setDelegate:self]; 
[UIView setDidStopSelector:@selector(scrollMethod:)]; 
[tableView setContentOffset:point]; 
[UIView commitAnimations]; 

और लागू करने के लिए सुनिश्चित करें कि आपके इस हस्ताक्षर के साथ scrollMethod::

- (void)scrollMethod:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 

आप संदर्भ का उपयोग कर सकते पता करने के लिए आपके पास कौन सा sender। UIView एनिमेशन पर अधिक के लिए UIView docs पढ़ें।

[self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x+260.0, 
                 self.collectionView.contentOffset.y) 
           animated:YES]; 

तो आप वापस एक मिल जाएगा:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 

जब स्क्रॉल खत्म

+0

क्या आपने पूरे प्रश्न को पढ़ने में भी परेशान किया? – Till

+2

@ जब मैंने जवाब देना शुरू किया, तब तक यह बदल गया, तो नहीं। इसके अलावा, अगर आप इसके बारे में नाराज होने जा रहे हैं, तो सवाल विचारों के लिए पूछता है (क्या आपने पूरा प्रश्न पढ़ा था?), कोई सही जवाब नहीं है;) – SpacyRicochet

+0

प्रश्न 27minutes पहले पूछा गया है। आपने 10 मिनट पहले उत्तर दिया था और सवाल संपादित नहीं किया गया है। सुनिश्चित नहीं है कि आपकी स्क्रीन पर क्या बदल गया है। – Till

1

एक scrollview, tableView या collectionView के लिए अगर आप कुछ इस तरह से करते हैं।

यदि उपयोगकर्ता दृश्य को स्थानांतरित करता है तो आपको यह कॉलबैक नहीं मिलता है।

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