iphone - एनिमेटेडव्यू सेटकंटेंटऑफसेट के साथ समस्या एनिमेटेड होने पर एनिमेटेड नहीं स्क्रॉलिंग: हाँ सेट है




uiscrollview animated (6)

Xamarin.iOS के लिए समाधान

InvokeOnMainThread(() =>
{
  scrollView.SetContentOffset(new PointF((page * UIScreen.MainScreen.Bounds.Width), 0), true);
});

इसे UIView.Animate का उपयोग करके भी हल किया जा सकता है

UIView.Animate(
    duration: .25,
    animation: () =>
    {
       scrollView.SetContentOffset(new PointF((value * UIScreen.MainScreen.Bounds.Width), 0), true);
    }
);

यह बहुत अजीब है और मैं सोच रहा हूं कि किसी के पास कोई विचार है या नहीं?

मैं आईपैड पर एक बटन प्रेस के जवाब में एक UIScrollView स्क्रॉल करने की कोशिश कर रहा हूं।

यदि मैं करता हूँ:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: NO];

स्क्रॉल व्यू अपेक्षित स्थिति पर कूदता है, लेकिन मैं इसे स्क्रॉल करना चाहता हूं। हालांकि, जब मैं करता हूं:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: YES];

तो यह कुछ भी नहीं करता है! मेरे पास एक और स्क्रॉल व्यू है जो ठीक से काम कर रहा है और setContentOffset:YES प्रतिक्रिया देता है setContentOffset:YES जैसा अपेक्षित है, इसलिए मैं काफी परेशान हूं। स्क्रॉलिंग क्यों नहीं हो सकती है इस पर कोई विचार सबसे ज्यादा स्वागत है!

इसके अलावा, - (void)scrollViewDidScroll:(UIScrollView *)sender animated:YES होने पर कुछ भी प्राप्त नहीं कर रहा है animated:YES का उपयोग किया जाता है लेकिन animated:NO होने पर इसका आह्वान किया जाता है animated:NO उपयोग किया जाता है!


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

  1. Nib के साथ UIScrollView का निर्माण।

    • बस IBOutlet बनाने के लिए मत भूलना और इसे स्क्रॉल में बाध्य करने के लिए nib में तत्व देखें। एक साधारण दृश्य आधारित एप्लिकेशन में बस उसके बाद स्क्रॉल हो गया, जैसा कि आप एनिमेटेड में कामना करते हैं: हाँ और नहीं दोनों। लेकिन काम करने के लिए

    -(void)scrollViewDidScroll:(UIScrollView *)sender; आपको प्रतिनिधि सेट करना होगा:

yourScrollView.delegate = self;

जहां 'स्वयं' वर्ग है, जहां आपके पास स्क्रॉल है ViewDidScroll फ़ंक्शन; बीटीडब्ल्यू इस वर्ग को 'UIScrollViewDelegate' प्रोटोकॉल के अनुरूप होना चाहिए।

2. मैन्युअल रूप से UIScrollView ऑब्जेक्ट का निर्माण।

  • यहां विचार मूल रूप से वही है, इसलिए मैं बस कुछ सरल कोड प्रदान करूंगा:

    -(void) creatingScrollView {
        UIScrollView *newScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(20, 5, 280, 44)];
        newScroll.pagingEnabled = YES;
        newScroll.showsVerticalScrollIndicator = NO;
        newScroll.showsHorizontalScrollIndicator = NO;
    
        // ... some subviews being added to our scroll view
    
        newScroll.delegate = self;
        [self.view addSubview:newScroll];
        [newScroll release];
    }
    

यह मेरे लिए काम करता है। उम्मीद है कि यह सहायक है।


मुझे एक ही समस्या का सामना करना पड़ रहा है जो स्क्रॉलव्यू स्क्रॉल नहीं करता है। और मैंने दृश्य पर "ऑटो लेआउट का उपयोग करें" अक्षम किया और फिर स्क्रॉलव्यू काम करता है।


मेरे पास एक ही समस्या थी, मेरे मामले में मैं भी रोक रहा था:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {...}

इस विधि को तुरंत बाद में बुलाया जाता है: (यह एनीमेशन के अंत तक प्रतीक्षा नहीं करता है):

[scrollView setContentOffset:currentOff animated: YES];

जिसका अर्थ यह है कि यदि आपके पास कोई तर्क है जो एनीमेशन के अंत में "इंतजार" करता है और आप scrollViewDidEndScrollingAnimation को रोकते हैं तो परिणाम अपरिभाषित होगा, आईई: एनीमेशन को समय-समय पर समाप्त करना।

संपादित करें: स्वीकृत समाधान / कार्यवाही:

[UIView animateWithDuration:.25 animations:^{
    self.scrollView.contentOffset = ...;
}];

मेरे परिदृश्य में भी "काम करता है" क्योंकि सामग्री सेट करना ऑफ़सेट सीधे स्क्रॉल नहीं करता है ViewDidEndScrollingAnimation


मैंने यह भी किया था और इस कामकाज को समाप्त कर दिया:

[UIView animateWithDuration:.25 animations:^{
    self.scrollView.contentOffset = ...;
}];

व्यक्तिगत अनुभव से बोलते हुए, यह समस्या तब होती है जब सेटकंटेंटऑफसेट: एनीमेशन को चलाने का मौका मिलने से पहले कई बार बुलाया जा रहा है।

मैंने इस मुद्दे को पूरी तरह से ट्रैक नहीं किया है, लेकिन मेरा मानना ​​है कि समस्या इस तरह कुछ है:

setContentOffset: एनिमेटेड हो जाता है जिसे नया ऑफसेट मान सेट करता है। setContentOffset: बाद में उसी पैरामीटर के साथ बुलाया जाता है, जो एनीमेशन रद्द करता है। यह भी नोटिस करता है कि नए पैरामीटर पुराने पैरामीटर के समान हैं, इसलिए मान लें कि एनीमेशन अभी तक नहीं चला है, भले ही कुछ भी करने की ज़रूरत नहीं है।

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







animated