2013-01-05 22 views
7

के तहत UIScrollView पर स्पर्श स्पर्श जानकारी मेरे पास एक ट्रांसपरेंट UIView के तहत एक UIScrollView है। मुझे स्क्रॉल व्यू में सभी पैन और टैप्स को स्थानांतरित करने की आवश्यकता है (जो केवल क्षैतिज स्क्रॉल करता है)। नियमित UIView लंबवत पैन (Subclass found here) को ट्रैक करने के लिए UIPanGestureRecognizer के उप-वर्ग का उपयोग करता है। ओवरले व्यू में, मैं उन्हें UIScrollView में पास करने के लिए स्पर्श ईवेंट विधियों को ओवरराइड करता हूं।किसी अन्य UIView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesBegan:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesBegan:touches withEvent:event]; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesCancelled:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesCancelled:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesCancelled:touches withEvent:event]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesEnded:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesEnded:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesEnded:touches withEvent:event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesMoved:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesMoved:touches withEvent:event]; 
} 

ओवरले व्यू, लंबवत पैन पूरी तरह से काम करता है। UIScrollView में, नलियां पूरी तरह से काम करती हैं। स्क्रॉलिंग हालांकि, इतना नहीं। स्क्रॉल व्यू लगभग तीन अंक स्क्रॉल करता है, फिर बंद हो जाता है (जैसा कि मैं क्षैतिज पैन के साथ जारी रहता हूं।) यदि मैं एक वेग के साथ जाने देता हूं, तो स्क्रॉल व्यू उस वेग को उठाता है और स्क्रॉलिंग समाप्त करता है।

स्क्रॉल दृश्य को स्क्रॉल करना बंद करने के संभावित कारण क्या होंगे, फिर वेग उठाएं?

उत्तर

2

आपके द्वारा पोस्ट किए गए कोड से, मुझे लगता है कि आप पारदर्शी UIView के साथ कुछ भी नहीं कर रहे हैं .. तो फिर आप उपयोगकर्ता इंटेक्शनएनेबल = NO क्यों सेट नहीं करते हैं; ??

+0

मान लें कि पारदर्शी दृश्य को कम से कम एक प्रकार के स्पर्श का जवाब देने की आवश्यकता है, जैसे स्वाइप या जो भी हो। –

+0

उहम्म ... मुझे नहीं पता कि आपकी स्क्रॉलिंग क्यों बंद हो जाती है और वेग उठाता है .. लेकिन मैंने जो किया होगा वह है .. मेरे UIScrollView सभी घटनाओं को संभाल लें .. स्वाइप सहित पारदर्शी UIView को संभालने के लिए ... और एक कॉलबैक फ़ंक्शन करें जो उस ईवेंट को उस UIView पर पास करता है ... UIView पर userInteractionEnabled को अक्षम भी करता है .. इसलिए UIScrollView जिस तरह से काम करता है उसे काम करता है .. nd UIView केवल एक ही ईवेंट को संभालेगा क्योंकि यह UIScrollView इसे पकड़ लेगा और पास करेगा यह UIView को ... शायद आपके पास वापस जाने और इसे बदलने में बहुत देर हो चुकी है .. लेकिन खेद है कि मुझे नहीं पता कि आपकी समस्या को कैसे ठीक किया जाए। – chuthan20

0

यहाँ एक आसान समाधान है कि मेरे लिए अच्छी तरह से काम है: पारदर्शी UIView में

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

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

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

0
#import "CustomUiView.h" 

@implementation CustomUiView.h 

-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event{ 
    return NO; 
} 
@end 

वह दृश्य जिसे आप बातचीत नहीं करना चाहते हैं। कस्टम UIView क्लास बनाएं और इस कस्टम व्यू का उपयोग अपने शीर्ष दृश्य के रूप में करें जो पॉइंट इनसाइड विधि में वापस नहीं लौटाता है। फिर स्पर्श स्वचालित रूप से कम हो जाएगा। आपके मामले में आपका पारदर्शी UIView UIView के CustomUiView उप-वर्ग होगा।