2013-11-04 6 views
5

के लिए ऑटोस्कोलिंग सुविधा मेरे पास Google है और इसके लिए खोज है लेकिन मेरी समस्या को हल करने के लिए इंटरनेट पर कुछ भी नहीं मिला लेकिन मुझे लगता है कि मेरी समस्या हल करने के लिए बहुत आसान हो जाएगी लेकिन मुझे सही कीवर्ड नहीं मिल रहा है यह।UILabel

मेरे पास एक व्यू कंट्रोलर है जिसमें रीडिंग व्यू नामक एक टेक्स्ट होता है, एक ऐसा दृश्य जिसमें टेक्स्ट पढ़ने के लिए स्क्रॉल करने में सक्षम होने के लिए बहुत लंबा टेक्स्ट होता है। उपयोगकर्ता ReadingView में जाते हैं, यह अपने आप में नीचे तक autoscroll होगा, उपयोगकर्ता UISlider कि मैं कार्यान्वित

समस्या मैं इस कोड

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 
द्वारा बिना किसी समस्या के autoscrolling क्या कर सकते हैं द्वारा स्क्रॉल की गति बढ़ा सकते हैं

लेकिन कोड को हटाया गया समय पर आधारित है। मुझे फ्रेम या पिक्सेल के आधार पर एक एनीमेशन मिलना है। क्योंकि, कुछ पाठ बहुत लंबा है अगर मैंने समय पर आधारित एनीमेशन का उपयोग किया है, तो यह बहुत नीचे तक नीचे स्क्रॉल करेगा, जबकि छोटा टेक्स्ट बहुत धीमा होगा।

तुम लोग किसी भी विचार है अगर मैं की तरह

एनीमेशन कर सकते हैं "अरे scrollview, हर फ्रेम आप संदर्भ के अंत तक 10 पिक्सेल नीचे स्थानांतरित करने के लिए है और मुझे परवाह नहीं है कि कब तक यह लेता है, गति तय की !! "

आपकी मदद के लिए धन्यवाद, तुम लोग मुझे एक कीवर्ड या कुछ भी

अद्यतन Fogmeister की सलाह देते हैं द्वारा हो गया देकर मदद कर सकता है। अवधारणा ब्लॉक एनीमेशन का उपयोग करती है और समय = टेक्स्ट की लंबाई/गति का उपयोग कर प्रत्येक पाठ के समय की गणना करती है और आपको प्रत्येक पाठ का अलग-अलग समय मिल जाएगा और उस समय एनीमेशन करने के लिए उपयोग किया जाएगा। मैंने कभी इस बारे में सोचा नहीं .... मैं जो भी ढूंढ रहा हूं वह पिक्सेल द्वारा एनीमेशन करने के लिए काम करता है जो एक गलत कीवर्ड है।

CGFloat scrollingPointSpeed = myslider.value; //value of UI Slider// 
CGFloat time = offset/scrollingPointSpeed ; 
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionCurveLinear animation:^() 
{ 
self.scroll.contentOffset = CGPointMake(0, offset); 
} 
completion:nil]; 
+0

सेट setAnimationDuration UILabel – NANNAV

+0

में लाइनों एनीमेशन का यह तरीका आईओएस 4 या उच्चतर में नहीं किया जाना चाहिए की कुल संख्या पर आधारित है। आपको मेरे उत्तर में ब्लॉक आधारित एनिमेशन का उपयोग करना चाहिए। – Fogmeister

उत्तर

3

ठीक है, पहले, आप नहीं CABasicAnimation का उपयोग करना चाहिए। ब्लॉक आधारित एनिमेशन का उपयोग करना सबसे अच्छा अभ्यास तरीका है।

दूसरा, यह काफी आसान होना चाहिए।

आप अधिकतम एक स्क्रॉल देखने की भरपाई की गणना कर सकते हैं ...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

इस पुस्तक की अधिकतम राशि है कि लागू किया जा सकता है। यानी दूरी।

अब, एक अवधि (समय) को काम करने के लिए आपको गति में गति की आवश्यकता है। चलिए प्रति सेकंड 50 अंक कहते हैं।

तो अब यह एक साथ रखा करने देता है ...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

CGFloat scrollingPointsPerSecond = 50.0; 

CGFloat time = maxOffsetWidth/scrollPointsPerSecond; 

[UIView animateWithDuration:time 
       animations:^() { 
    self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
}]; 

जाहिर है, इस क्षैतिज स्क्रॉल के लिए है, तो आप खड़ी तो बस विभिन्न मूल्यों का उपयोग करना चाहते हैं।

त्वरित संपादन

ऊपर एनीमेशन समारोह डिफ़ॉल्ट एनीमेशन वक्र जो UIAnimationOptionCurveEaseInOut है उपयोग करता है।इसका मतलब यह होगा कि स्क्रॉल की गति शुरुआत में 0 से धीरे-धीरे बढ़ेगी और फिर धीरे-धीरे अंत में 0 तक धीमा हो जाएगी।

आप जो चाहते हैं वह एक रैखिक गति है। यानी स्क्रॉल की गति सभी तरह से वही है। ऐसा करने के लिए आपको ऊपर दिए गए से थोड़ा अलग फ़ंक्शन चाहिए। यह सिर्फ कुछ अतिरिक्त पैरामीटर जोड़ता है ...

[UIView animateWithDuration:time 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
        animation:^() { 
         self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
        } 
       completion:nil]; 

यह वही करेगा जो आप एक रैखिक आंदोलन के साथ चाहते हैं।

+1

धन्यवाद !!! मैं कल इसका परीक्षण करूंगा। और परिणाम बताएगा। – Einzeln

+0

बहुत बढ़िया !!! धन्यवाद। मैंने यूआईस्लाइडर की गति से पाठ की कुल ऊंचाई की गणना करने और विभाजित करने के लिए अपनी विधि का उपयोग किया। मुझे पता है कि यह इस तरह सुपर आसान होना चाहिए, लेकिन गूंगा !! हा हा धन्यवाद। – Einzeln

+0

कोई चिंता नहीं। मैं हमेशा खुद को बहुत ज्यादा सोचता हूं और वास्तव में जटिल समस्याएं बहुत जटिल बना देता हूं। मैं खुशी से मदद कर सकता है :) – Fogmeister