2011-12-14 11 views
8

मेरे पास 2 UIScrollViews प्रत्येक छवि (ओवरव्यू और ज़ूम मोड) प्रदर्शित करते हैं। मैं पहले से ही अलग-अलग विचारों में स्क्रॉल कर सकता हूं, अब मैं सिंक में दोनों विचारों का केंद्र बिंदु रखना चाहता हूं।एकाधिक UIScrollViews के साथ स्क्रॉल सिंक कैसे करें?

मुझे लगता है कि जब कोई विचार घटनाएं बना रहा है, तो मुझे उन्हें अन्य दृश्य में भी अग्रेषित करने की आवश्यकता है, केवल यह नहीं पता कि कौन से फ़ंक्शन प्रासंगिक हैं। कोई संकेत?

संपादित करें: यदि समांतर लाइव स्क्रॉलिंग संभव नहीं है, तो मैं स्क्रॉल ईवेंट के बाद कम से कम सिंक करना चाहता हूं।

उत्तर

15

बाहर कार्यों

आप कर सकते हैं चेक इसे प्रतिनिधि विधि -scrollViewDidScroll: में एक साथ लिंक करें, जिसे उपयोगकर्ता स्क्रॉल करते समय लगातार कॉल किया जाता है।

+3

का उदाहरण धन्यवाद, वास्तव में महान काम करता है! - (शून्य) scrollViewDidScroll: (UIScrollView *) scrollView { अगर (scrollView == v1) {v2.contentOffset = v1.content ऑफ़सेट; } और अगर (....... –

3

यह आवश्यकता के लिए विशिष्ट नहीं है लेकिन विभिन्न वर्गों के बीच scrollViews को सिंक करने में मदद करता है।

स्क्रॉल सिंक करने के लिए विभिन्न वर्गों के बीच दृश्य, किसी विशेष अधिसूचना के लिए NSNotificationCenter का उपयोग करें।

जब स्क्रॉल -scrollViewDidScroll भीतर तो होती है: प्रतिनिधि विधि, NSNotificationCenter अधिसूचना (userInfo सामग्री के साथ रूप scrollView.contentOffset.x & scrollView.contentOffset.y) पोस्ट करने के लिए का उपयोग उदाहरण:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc]init]; 
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.x] 
      forKey:@"offsetX"]; 
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.y] 
      forKey:@"offsetY"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"scrollSync" 
             object:nil 
             userInfo:userInfo]; 
} 

एक ही कक्षा या किसी अन्य वर्ग में इस अधिसूचना के लिए पंजीकरण करें और -setContentOffset: स्क्रॉल व्यू/एस पर समन्वयित करना चाहते हैं।

(या तो didLoad में या init या के रूप में आप की तरह के रूप में कई वर्गों में आप के लिए कहीं भी उपयुक्त) ऑब्जर्वर जोड़ा जा रहा है पर उदाहरण:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleNotification:) 
             name:@"scrollSync" object:nil]; 


चयनकर्ता विधि

-(void)handleNotification:(NSNotification *)sender 
{ 
float newX = [[sender.userInfo objectForKey:@"offsetX"] floatValue]; 
float newY = [[sender.userInfo objectForKey:@"offsetY"] floatValue]; 

[myOtherScrollView setContentOffset:CGPointMake(newX,newY)]; 
} 
संबंधित मुद्दे