2011-04-14 21 views
8

के अंदर एनीमेशन मैं एक दृश्य को फीका-आउट करना चाहता हूं क्योंकि यह एक अभिभावक UIScrollview के अंदर स्क्रॉल कर रहा है। जब फीड-आउट एनीमेशन शुरू होता है, तो स्क्रॉल व्यू स्क्रॉलिंग बंद कर देता है। जब फीका पूरा हो जाता है तो यह सही स्थिति में कूद जाता है।UIScrollView

मेरा फीड-आउट एनिमेट विथडिशन और ब्लॉक ऑब्जेक्ट्स के साथ हासिल किया जाता है, जो पृष्ठ परिवर्तन में ट्रिगर होता है जिसे मैं scrollViewWillBeginDragging में पहचानता हूं।

क्या कोई जानता है कि उन्हें दोनों एक साथ कैसे करना है? बस स्पष्ट होने के लिए, मैं UIScrollView स्क्रॉलिंग को 'एनिमेटिंग' नहीं कर रहा हूं - बल्कि यह स्वाइप करने के उपयोगकर्ता इंटरैक्शन के माध्यम से हो रहा है।

संपादित करें:

यहाँ कोड मैं UIView फीका करने के लिए उपयोग कर रहा हूँ है। यह कोड UIViewController व्युत्पन्न कक्षा में है, जो UIScrollView के प्रतिनिधि है। जब उपयोगकर्ता अपनी उंगली खींचने लगते हैं, तो मैं उप दृश्य को फीका करना चाहता हूं। लेकिन जब उपयोगकर्ता एक उंगली खींचने लगते हैं, तो सबव्यू फीड और स्क्रॉलिंग बंद हो जाती है। सबव्यू पूरी तरह से फीका हो जाने के बाद, स्क्रॉल दृश्य उस स्थान पर स्नैप करेगा जहां उपयोगकर्ता की उंगली है।

-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView 
{ 
    [UIView animateWithDuration:0.5 
     animations:^ 
     { 
      self.subView.alpha = 0.0f; 
     } 
     completion:^(BOOL finished) { }]; 
} 

उत्तर

10

बहुत ही दिलचस्प ... मैं इस तरह से देख लेने, और हाँ, मैं एक ही प्रभाव है ... ठीक है, ऐसा लगता है कि किसी भी तरह animateWithDuration ब्लॉक मुख्य थ्रेड ... जो तार्किक नहीं है, और प्रलेखन इसके बारे में कुछ भी नहीं कहता है .. हालांकि एक आसान कामकाज है, इस तरह कुछ: (मैंने एनीमेशन अवधि 3 पर सेट की है, इसलिए मैं देख सकता हूं कि यह काम कर रहा है जबकि मैं अपनी स्क्रॉल चला रहा हूं दृश्य :) ...)

[UIView beginAnimations:@"FadeAnimations" context:nil]; 
[UIView setAnimationDuration:3]; 

self.subview.alpha = 0.0f; 

[UIView commitAnimations]; 
+0

तो तुम कह रहे हो सामान्य UIView तरीकों तालिका को प्रभावित नहीं करते, जबकि ब्लॉक तरीकों कार्य करें: कुछ इस तरह दिए गए दृश्य की अस्पष्टता के लिए स्क्रॉल स्थिति से संबंधित एक पृष्ठवार UIScrollView में इस्तेमाल किया जा सकता ? बोहुत अजीब। –

+0

अच्छी तरह से .. मुझे नहीं पता क्यों (अभी तक), लेकिन मैंने इसका परीक्षण किया है, और मैं पुष्टि कर सकता हूं कि यह इस तरह काम करता है ... – Moszi

+0

बहुत रोचक। :) –

12

देर एक छोटी सी, लेकिन आप ब्लॉकों का उपयोग कर रखना चाहते हैं, तो आप उपयोग कर सकते हैं:

animateWithDuration: देरी: विकल्प: एनीमेशन: पूरा: स्क्रॉल करते हुए बातचीत की अनुमति के लिए

ऐड "UIViewAnimationOptionAllowUserInteraction" विकल्प के लिए।

मुझे यकीन है कि आपको अभी भी अंतराल की समस्या होगी। यहां सबसे अच्छा तरीका है जिसे मैं समझा सकता हूं। कृपया मुझे पहले से क्षमा करें क्योंकि मैं शायद गलत शब्दों का उपयोग कर रहा हूं। सभी एनिमेशन मुख्य धागे पर चलना चाहिए। जब आप एनीमेशन कॉल करते हैं, तो आईओएस पहले * पी * rocesses तो यह * आर * * एफ * राम्स उत्पन्न करने से पहले समाप्त होता है। यह इस तरह दिख रहा है।

PPPPRRRRFFFFFFFFFFFFFFFFFF

लेकिन चूंकि ScrollViews पता नहीं है कि कितनी देर तक अपने एनीमेशन होने जा रहा है या जब यह खत्म हो जाएगा, तो वह ऐसा एनीमेशन पालन किया है।

PRFPRFPRFPRFPRFPRFPRFPRF

मेरे सिद्धांत अंतराल आप अनुभव कर रहे एक ही समय में मुख्य थ्रेड पर टकराने इन दो कॉल के साथ क्या करना पड़ता है। मुझे यकीन नहीं है कि आप एक तेज चिप के अलावा इस समस्या को कैसे हल करेंगे। मैंने पाया है कि आप एक एनीमेशन को सीपीयू और एक जीपीयू में धक्का दे सकते हैं, लेकिन मैं अभी तक प्रोग्रामिंग में उन्नत नहीं हूं।

+0

यह समाधान मेरे लिए काम नहीं करता है:/ – Lirik

0

ऐसी जानकारी के मुताबिक जो अभी भी व्यापक रूप से रिलीज़ नहीं होने वाली है, सभी आईओएस 4.x संस्करण एनीमेशन प्रगति पर होने पर पूरी तरह से उपयोगकर्ता इंटरैक्शन को अवरुद्ध करते हैं।

क्या यह दिलचस्प नहीं है, हालांकि, आप यूआईटीओच एनीमेशन के दौरान अभी भी पंजीकृत हैं? हम्म ... हो सकता है कि एचआईएनटीएस कि कुछ नया अभी तक जारी संस्करण में आ रहा है!

आईई, यदि आप कर सकते हैं, तो UIView क्लास विधियों पर आईओएस 5 बीटा दस्तावेज पढ़ें।

8

मैं सुझाव दूंगा, क्योंकि ओपेसिटी यूआईएसक्रॉल व्यू में उपयोगकर्ता की उंगली की गतिविधियों पर आधारित है, प्रतिनिधि विधि scrollViewDidScroll का उपयोग करके:। पैरामीटर के रूप में पारित स्क्रॉल व्यू का उपयोग सामग्री ऑफसेट की जांच के लिए किया जा सकता है जो कि केवल एक CGPoint है जो यूआईएसक्रॉल व्यू के सामग्री दृश्य में कितनी दूर स्क्रॉल करता है, यह दर्शाता है। ,

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    // The case where I used this, the x-coordinate was relevant. You may be concerned with the y-coordinate--I'm not sure 
    CGFloat percent = ((int)(scrollView.contentOffset.x) % (int)(scrollView.frame.size.width))/scrollView.frame.size.width; 
    if (percent > 0.0 && percent < 1.0) { // Of course, you can specify your own range of alpha values 
    relevantView.alpha = percent; // You could also create a mathematical function that maps contentOffset to opacity in a different way than this 
    } 
} 
+0

याकूब, आप राजा हैं! – Luda

+0

सही तर्क समाधान, मैं वर्टिकल स्कोर धन्यवाद दोस्त के लिए परिवर्तित – Alok