2011-03-03 29 views
5

मेरे पास इन दो पदों (1907297 और 689684) जैसी स्थिति है और मेरी स्थिति का सबसे संक्षेप में वर्णन करने के लिए, मैं इस पाठ/ग्राफिकल लेआउट को प्रस्तुत करता हूं (जैसा कि आप चाहते हैं आईबी में देखते हैं, मांगपत्र स्तरों लागू करने के लिए)उचित स्क्रॉलिंग के लिए UIView से अंतर्निहित UIScrollView को स्वाइप करने के लिए

UIView (MainView इस्तेमाल किया डॉट्स: 320x460)
। .UIScrollView (स्क्रॉलव्यू: 320x460)
। .UIView (ओवरले व्यू: 320x40)
। । । .UIButton (ArbitraryButton1)
। । । .UILabel (ArbitraryLabel1)
। । । .UILabel (ArbitraryLabel2)

लक्ष्य ओवरलेव्यू के लिए एक एकीकृत, पारदर्शी कंटेनर के रूप में कार्य करने और स्क्रॉलव्यू के शीर्ष पर कुछ मनमानी बटन/लेबल प्रदर्शित करने के लिए है। स्क्रॉलव्यू में सामग्री उपयोगकर्ता स्वाइप के साथ चाल के नीचे सामग्री के दौरान इन बटन/लेबल स्थिर रहना चाहिए। कभी-कभी बटन/लेबल कभी-कभी छुपा/अनदेखा/एनीमेशन (एनीमेशन के साथ) में स्केल किए जा सकते हैं, जो कि उन्हें एकल ओवरलेव्यू में समूहीकृत करने के लिए आसान बनाता है।

समस्या यह है कि, ओवरलेव्यू पर टैप अंतर्निहित स्क्रॉलव्यू के माध्यम से सीधे प्रेषित प्रतीत होता है, गति को स्वाइप करने से कोई प्रभाव नहीं पड़ता है। मैं पता लगा सकते हैं/OverlayView में

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

विधि अधिभावी द्वारा स्वाइप रोकना, हालांकि मैं अभी तक एक तरह से ठीक से एक तरह से यह स्क्रॉल करता है कि में scrollview के साथ उन लोगों के पास करने के लिए नहीं मिला है। जाहिर है स्पर्श छूएं UIScrollView स्वाइप का पता लगाने/व्याख्या करने के लिए उपयोग नहीं करता है?

मेरे द्वारा शोध किए गए सभी अन्य समान पदों को या तो एक अलग समाधान मिला है जो मेरे मामले में काम नहीं करेगा या अभी अनसुलझा हो गया है। मैंने स्पर्शों को नियोजित करने का उल्लेख भी देखा है शॉल्डबिन/स्पर्श्स शॉल कैंसल हालांकि मुझे समझ में नहीं आता कि यह कैसे लागू किया जाएगा। वैसे भी, उम्मीद है कि समुदाय से कुछ अंतर्दृष्टि है जो मुझे इसके लिए एक सुरुचिपूर्ण समाधान के साथ आने की अनुमति दे सकती है - कोई भी नमूना कोड शानदार होगा।

अग्रिम धन्यवाद, जोएल।

पीएस - मुझे यह भी उल्लेख करना चाहिए कि मुझे इसे आईओएस 3.0 के साथ संगत बनाने की ज़रूरत है, इसलिए मुझे लगता है कि UIGestureRecognizers का उपयोग करने का प्रयास करना बाहर है।

+0

मैं आप कभी भी इस हल लगता नहीं है? – mahboudz

+0

क्या आपने अभी तक इसे हल किया है? –

उत्तर

0

कैसे, रनटाइम पर देखने के बारे में डीडलोड लोड करने के लिए आप कंटेनर व्यू से बटन लेते हैं और उन्हें दृश्य में सीधे दृश्य के रूप में देखते हैं (और कंटेनर व्यू से छुटकारा पाएं)? फिर स्वाइप को रोकने के लिए कोई कंटेनर दृश्य नहीं है लेकिन आप अभी भी आईबी में चीजों को समूहबद्ध करने के लिए एक दृश्य का उपयोग कर सकते हैं।

इसके अलावा आप संभावित रूप से स्क्रॉल व्यू के सबव्यूव के रूप में कंटेनर दृश्य डाल सकते हैं, और स्क्रॉल व्यू प्रतिनिधि जब भी उपयोगकर्ता स्क्रॉल करता है तो दृश्य को फिर से स्थिति में रखता है। ऐसा लगता है कि झटकेदार होने की उच्च संभावना है लेकिन कोशिश करने लायक हो सकता है।

यदि यह दृश्य दृश्य दृश्य कंटेनर है और आपको इसे देखने की आवश्यकता है, तो आप स्क्रॉल व्यू को प्रस्तुत करने के लिए कैलियर के शीर्ष पर पर्यवेक्षण में रखे गए कैलियर का उपयोग कर सकते हैं, क्योंकि कैलियर के पास कुछ भी नहीं है इनपुट और प्रत्येक स्पर्श नहीं होगा।

0

आप UIScrollView उपवर्ग चाहिए और touchesShouldCancelInContentView ओवरराइड: विधि

-(BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 

    if ([view isKindOfClass:[UIButton class]]) {//or whatever class you want to be able to scroll in 
     return YES; 
    } 

    if ([view isKindOfClass:[UIControl class]]) { 
     return NO; 
    } 

    return YES; 
} 
+0

और, ज़ाहिर है, CanCancelContentTouches को YES पर सेट किया जाना चाहिए (जो डिफ़ॉल्ट रूप से हाँ है, लेकिन अगर किसी ने इसे सेट किया है) –

0

यहाँ एक आसान समाधान है कि मेरे लिए अच्छी तरह से काम है: OverlayView (UIScrollView के शीर्ष पर दृश्य) में

, चौड़ाई बनाने और ऊंचाई 0 दोनों (ताकि दृश्य अब स्क्रॉलव्यू के शीर्ष पर तकनीकी रूप से नहीं है) और क्लिप को सेट करें ToBounds = NO (ताकि ओवरलेव्यू की सामग्री अभी भी स्क्रॉलव्यू के शीर्ष पर दिखाई दे)। यह मेरे लिए एक आकर्षण की तरह काम किया।

self.OverlayView.clipsToBounds = NO; 
CGRect frame = self.OverlayView.frame; 
self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0); 

ध्यान दें कि यदि OverlayView इंटरैक्टिव नियंत्रण (ऊपर बटन की तरह) शामिल हैं तो वे अब काम करेंगे। आपको UIScrollView के ऊपर इसे अपने स्वयं के दृश्य में स्थानांतरित करने की आवश्यकता होगी।

0

मुझे ऐसा कुछ करने की आवश्यकता थी और कुछ शोध और एप्पल के दस्तावेज के माध्यम से पढ़ने के बाद, मैंने यह वास्तव में सरल और सुरक्षित ओपन सोर्स लाइब्रेरी बनाई जो आपकी (मोबाइल जोएल) समस्या को हल करेगी। तो यह सीधे संबंधित है डेमो परियोजना एक scrollview उपयोग करता है:
https://github.com/natrosoft/NATouchThroughView

तो आपके विचार पदानुक्रम इस प्रकार दिखाई देगा:

UIView (MainView: 320x460)  
. .UIScrollView (ScrollView: 320x460) 
. .UIView (OverlayView: 320x40) --> change this view to class NARootTouchThroughView in I.B. 
. . . .UIView (transparent UIView that you change to class NATouchThroughView in I.B.) 
. . . .UIButton (ArbitraryButton1) 
. . . .UILabel (ArbitraryLabel1) 
. . . .UILabel (ArbitraryLabel2) 

तो मूल रूप से अपने ओवरले दृश्य यह नीचे अपने अंतिम रूप अग्रेषित करेंगे जो तब प्राप्त हो जाएगी UIScrollview द्वारा। अपने UILabels विशाल कर रहे हैं और अंतिम रूप में अवरोध उत्पन्न कर रहे हैं, तो उनमें से शीर्ष पर एक और NATouchThroughView जगह इतना है कि अंतिम परिणाम इस प्रकार है:

UIView (MainView: 320x460)  
. .UIScrollView (ScrollView: 320x460) 
. .NARootTouchThroughView (OverlayView: 320x40) 
. . . .NATouchThroughView (transparent) 
. . . .UIButton (ArbitraryButton1) 
. . . .UILabel (ArbitraryLabel1) 
. . . .UILabel (ArbitraryLabel2) 
. . . .NATouchThroughView (transparent and covers the labels but not the UIButton)