2009-07-06 10 views
5

मेरे पास UITextView है जिसमें बहुत सारी सामग्री है।आईफोन ऑटो-स्क्रॉल UITextView लेकिन मैन्युअल स्क्रॉलिंग को भी अनुमति दें

scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 10); 
[textView setContentOffset:scrollPoint animated:YES]; 

यह वास्तव में अच्छी तरह से काम करता है, के रूप में एनीमेशन पुस्तक नहीं बल्कि चिकनी बनाता है: मैं एक बटन है कि UITextView स्वचालित रूप से एक NSTimer पाश में + 10 पिक्सल स्क्रॉल करने के लिए अनुमति देता है। मैं उपयोगकर्ता को अपनी उंगली से स्क्रॉल करके आगे या पीछे जाने की अनुमति देना चाहता हूं, हालांकि स्क्रॉल एनीमेशन के बाद इस कोड के कारण, स्क्रॉल उस स्थान पर वापस आ जाता है जहां यह ऑटो-स्क्रॉल होगा।

मैन्युअल स्क्रॉल के बाद मुझे scrollPoint चर को रीसेट करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें। मैंने प्रतिनिधि विधि

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 

लागू करने का प्रयास किया है, लेकिन यह विधि मेरी स्वचालित स्क्रॉल पर भी आग लगती है।

कोई विचार? प्रभावी रूप से 2 तरीके सामग्री एपीआई से लड़ने के अपनी तरह के स्क्रॉल करने के लिए होने से

scrollPoint = textView.contentOffset; 
scrollPoint.y= scrollPoint.y+10; 
[textView setContentOffset:scrollPoint animated:YES]; 

उत्तर

12

तुम बस यह कि वह कहाँ है के सापेक्ष के लिए कदम बना सकता है।

यदि मैं सही ढंग से समझता हूं, तो आपके वर्तमान सेटअप में आपके पास एक बटन है जो एनीमेशन को सक्रिय करता है।

जब आप इस तरह से स्क्रॉल करते हैं, तो एक एनीमेशन बनाया जाता है और दूसरे धागे पर चलाया जाता है। जबकि एनीमेशन चल रहा है, प्रस्तुति परत बदल दी जा रही है। हालांकि, एनीमेशन पूर्ण होने तक वास्तविक सामग्री ऑफसेट सेट नहीं है।

यह तक तक काम करता है, जबकि आप पहले से ही एनिमेटेड होने पर उसी संपत्ति को एनिमेट करने का प्रयास करते हैं।

आम तौर पर, इस मामले में आप मौजूदा एनिमेशन को रद्द करते हैं, फ्रेम को प्रस्तुति परत (वर्तमान ऑनस्क्रीन स्थिति) पर सेट करें, फिर नई एनीमेशन लागू करें।

हालांकि, आप textView (setContentOffset: एनिमेटेड :) की सुविधा विधि का उपयोग कर रहे हैं। जब आप ऐसा करते हैं तो कोड की कम लाइनों के बदले में आप ठीक एनीमेशन नियंत्रण छोड़ देते हैं।

मुझे लगता है कि प्रगति पर स्क्रॉल को रोकना कठिन हो सकता है, या उच्च स्तर के एपीआई का उपयोग करना असंभव हो सकता है। इसका मतलब यह है कि आप जो चाहते हैं उसे करने के लिए आपको कम से कम UIView एनीमेशन ब्लॉक का प्रयास करना होगा और अधिकांशतः वास्तव में CAAnimation बनाना होगा।

आसान समाधान आपके टेक्स्ट को स्क्रॉल करने के एक साधन पर व्यवस्थित करना है। एचआईजी आईफोन पर प्रत्यक्ष हेरफेर का उपयोग करने का पक्ष लेता है। यहां तक ​​कि यदि दोनों तरीकों से स्क्रॉल करना आसान है, तो भी मैं बटन विधि को मिटाने की अनुशंसा करता हूं, और केवल उस सीधे हेरफेर का उपयोग करें जिसे आप कार्यान्वित कर रहे हैं।

+0

मैन मेरे पास इस समस्या के बहुत करीब मेरा सिर था। आपका समाधान खूबसूरती से काम करता है! धन्यवाद। –

+0

यह "एनिमेटेड: नहीं" – DerWOK

0

मुझे लगता है कि:

2

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

सेटअप

if (autoscrollTimer == nil) { 
    autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(35.0/1000.0) 
                target:self 
                selector:@selector(autoscrollTimerFired:) 
                userInfo:nil 
                repeats:YES]; 
} 

कुंजी एनीमेशन बंद करने और आगे बढ़ छोटी वृद्धि में ऑफसेट में है। ऐसा लगता है कि यह तेजी से चल रहा है और यह मैन्युअल स्क्रॉल में हस्तक्षेप नहीं करता है।

- (void)autoscrollTimerFired:(NSTimer*)timer { 
    CGPoint scrollPoint = self.textView.contentOffset; 
    scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1); 
    [self.textView setContentOffset:scrollPoint animated:NO]; 
} 

मैं बहुत उद्देश्य-सी और iphone विकास के लिए नया हूँ इसलिए यदि अधिक अनुभव के साथ किसी को भी इस दृष्टिकोण के साथ एक समस्या देखता है मैं किसी भी राय जानना चाहेंगे।

+0

के साथ चिकनी स्क्रॉल करता है मेरे मामले में मुझे वास्तव में एनीमेशन पसंद आया, लेकिन यदि आप केवल 1 पिक्सेल से आगे बढ़ रहे हैं तो यह चिकनी होना चाहिए। अन्य कारणों से, हालांकि, मैंने एक वेब व्यू का उपयोग करने के लिए स्विच किया, जो स्क्रॉल व्यू से प्राप्त नहीं होता है, इसलिए मुझे स्क्रॉलिंग करने के लिए जावास्क्रिप्ट का उपयोग करना पड़ा। छी। यह थोड़ा चंचल था, लेकिन यह एक सार्थक व्यापार था। –

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