2011-06-13 20 views
7

मैं फ़ोटो ऐप के समान एक छवि दृश्य बना रहा हूं। मेरे पास एक PagingScrollView है जो दृश्य नियंत्रक का दृश्य है (loadView में बनाया गया)। यूआईएममेज व्यू सबव्यू के साथ पेज UIScrollViews हैं। जब तक मैं पहली बार इसके अलावा इंडेक्स में 'छोड़ना' (सामग्री ऑफसेट सेट) करने की कोशिश करता हूं, तब तक सबकुछ डरावना काम करता है। अगर मैं कहने के लिए छोड़ देता हूं, छवि 'मैं', छवि सही ढंग से प्रदर्शित होती है, लेकिन यदि उपयोगकर्ता एक टैप इशारा करता है तो सामग्री ऑफसेट छवि को '0' प्रदर्शित करने के लिए खुद को रीसेट कर देता है। त्रुटि अन्य जेस्चर जैसे ड्रैग के साथ नहीं होती है और यदि आप ड्रैग की तरह एक और इशारा करते हैं तो यह स्पर्श के साथ नहीं होता है।UIScrollView प्रोग्रामेटिक रूप से सामग्री सेट करें समस्या समस्या

यह ImageViewerController

- (void)loadView 
{ 
    //Make the outer spaging scroll view 
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; 
    scrollView.pagingEnabled = YES; 
    scrollView.backgroundColor = [UIColor blackColor]; 
    scrollView.showsVerticalScrollIndicator = NO; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.contentSize = [self contentSizeForPagingScrollView]; 
    scrollView.delegate = self; 
    self.view = scrollView; 
} 

यह कैसे मैं सामग्री स्थापित करने के लिए कोशिश कर रहा हूँ है की मेरी loadView ऑफसेट

#define myView (UIScrollView *)self.view 

[myView setContentOffset:[self contentOffsetForIndex:index]]; 

[..] 

- (CGPoint)contentOffsetForIndex:(NSUInteger)index 
{ 
    return CGPointMake((index * (self.view.frame.size.width)), 0); 
} 
+0

शायद इशारा पहचानकर्ता पोस्ट कर सकते हैं? यहां सबकुछ ठीक दिखता है। क्या टैप सामग्री का आह्वान करता है कुछ प्रकार के ऑफसेट-परिवर्तन? – Jensen2k

+0

मैं अपने स्वयं के किसी भी इशारा पहचानकर्ता नहीं जोड़ रहा हूं। टैप को पेजिंग स्क्रॉल व्यू द्वारा कैप्चर किया जा रहा है और यह अपनी सामग्री को रीसेट करता है पृष्ठ को प्रदर्शित करने के लिए वापस ऑफ़सेट करें। हालांकि यह मुझे स्क्रॉलव्यूडस्क्रॉल प्रतिनिधि संदेश – Mike

+0

मिलता है IOS 6 में आईओएस 5 में एक ही समस्या का सामना कर रहा है, यह ठीक काम करता है। एक बार जब मैं पेजिंग सक्षम करता हूं तो सक्षम या यदि मैं स्क्रॉल एनीमेशन अक्षम करता हूं तो यह बग गायब हो जाता है। किसी को भी इसे ठीक करने के लिए एक बेहतर तरीका पता है? – AmineG

उत्तर

12

आप क्षैतिज या अनुलंब स्क्रॉल रहे है? आपका ऑफ़सेट लॉजिक
CGPointMake((index * (self.view.frame.size.width)), 0); वाई अक्ष के 0 पर ले जाएगा। EDIT
मैं दृष्टिकोण को आलसी लिख रहा था।

क) प्रोग्राम ऑफसेट setContentOffset :, scrollRectToVisible, setFrame (UIScrollView के द्वारा निर्धारित है आंतरिक SetContentOffset कॉल):
यहाँ दृष्टिकोण मैं ऑफसेट संबंधित मुद्दों को खोजने के लिए अपनाने है। सबसे पहले इन सभी को अपने कोड में जांचें, अगर वे सही हैं।

बी) scrollViewDidScroll: विधि में सेट ऑफसेट के लिए लॉग प्रिंट करें।

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog(@" Offset = %@ ",NSStringFromCGPoint(scrollView.contentOffset)); 
} 

यह आपको ऑफसेट मूल्यों को निर्धारित किया जा रहा की पहचान (ज्यादातर मामलों में, ऑफसेट की आवश्यकता setContentOffset के लिए एक और कॉल द्वारा ओवरराइड है में मदद मिलेगी:, कोड में कुछ जहां; कहते हैं कि वर्तमान ऑफसेट है (130,0 की सुविधा देता है) और आप ऑफसेट (300,0 सेट करना चाहते हैं) यह कदम (यदि एनिमेटेड में होता है), तो आप की तरह
Offset = {130,0}
Offset = {190,0}
Offset = {220,0}
Offset = {270,0}
Offset = {300,0}

लॉग मिल सकता है अगर वहाँ setContentOffset (एनिमेटेड) को कुछ अन्य कॉल है, मान लीजिए कि यह सेट ऑफसेट (0,0), आपके द्वारा प्राप्त किए गए लॉग
Offset = {130,0}
Offset = {190,0}
Offset = {90, 0}
Offset = {220,0}
Offset = {60,0}
Offset = {270,0}
Offset = {30,0}
Offset = {300,0}
Offset = {0,0}

जैसे दिखेंगेयदि आप लॉग में दूसरे पैटर्न को देखते हैं, तो आप सुनिश्चित कर सकते हैं कि सेटकंट ऑफसेट सेट करने के लिए कुछ अनन्य कॉल है।
3) एक बार जब आप पहचानते हैं कि सेटकंटेंट ऑफसेट सेट करने के लिए अनइंटेड कॉल के लिए कॉल है, तो इसके स्रोत को खोजने का प्रयास करें (सेट करने के लिए ब्रेकपॉइंट सेट करने के लिए कॉन्टेन्टऑफसेट मदद कर सकता है), और मामले के मामले में संबोधित किया जा सकता है। पूर्व के लिए:
_adjustContentOffsetIfNecessary, एक आंतरिक विधि है जिसे UIScrollView के लिए फ्रेम सेट किया जाता है। यह कारण हो सकता है (फ्रेम सेट करने के बाद पिछले ऑफ़सेट को लागू करने का प्रयास करें)।

आशा इस (बहुत mee, नीचे वोट हटाया :) प्राप्त करने में) में मदद करता है

+0

मैं केवल क्षैतिज स्क्रॉल कर रहा हूं। पेजिंग स्क्रॉल व्यू की contentSize.height पर्याप्त छोटा है ताकि वर्टिकल स्क्रॉलिंग अक्षम हो, इसलिए मूल रूप से मैं सामग्री के yPos को वही रहना चाहता हूं। समस्या यह है कि ऑफसेट का एक्स भाग पहले स्पर्श पर रीसेट कर रहा है – Mike

+0

@ monkybonk05 आप संपादन देख सकते हैं, उम्मीद है कि यह मदद करता है। विस्तृत सुझाव के लिए – Tatvamasi

+0

धन्यवाद। मेरे पास इस समय परीक्षण करने का समय नहीं है, लेकिन यह एक ठोस सुझाव की तरह लगता है और जब मैं कर सकता हूं तो ऐसा करूँगा। जब मैं उन्हें प्राप्त करता हूं तो मैं परिणामों के साथ धागे को अपडेट करूंगा = डी – Mike

1

मैं एक ही समस्या (थोड़े) लेकिन मेरी समस्या के लिए अपने समाधान है मैं

pagingEnabled 

निष्क्रिय किया गया है कि UIScrollView का ... जब आपका UIScrollview ContentOffset सेट करते समय किसी विशिष्ट स्थान पर रीसेट कर रहा है, तो कृपया जांचें कि आपका पेजिंग सक्षम अक्षम है ...

+0

मुझे एक ही समस्या है। मैं पेजिंग का उपयोग करता हूं और मैं ऑफ़सेट सेट करना चाहता हूं। यहां तक ​​कि जब मैं इसे अस्थायी रूप से अक्षम करता हूं तब भी यह सेट नहीं होता है। –

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