2012-02-28 13 views
7

स्पर्श करते समय स्क्रॉल नहीं करता है मेरे पास एक ऐसा प्रोजेक्ट है जो Google AdMob विज्ञापन SDK का उपयोग करता है। मैं कुछ अन्य बटनों के साथ होमपेज पर कुछ विज्ञापन दिखाने की कोशिश कर रहा हूं, जिनमें से कुछ स्क्रीन के नीचे हैं।UIScrollView GADBannerView सबव्यू

मैंने एक यूआईएसक्रॉल व्यू का उपयोग किया है और डीएफपी से कुछ GADBannerViews के साथ-साथ बटन भी जोड़े हैं। विज्ञापन ठीक से लोड होते हैं और मैं बिना किसी समस्या वाले विज्ञापनों और बटन पर क्लिक कर सकता हूं।

समस्या तब होती है जब मैं स्क्रॉल व्यू को स्क्रॉल करने का प्रयास करता हूं। यदि मैं विज्ञापन दृश्य पर छूना शुरू करता हूं, तो स्क्रॉल दृश्य स्क्रॉल नहीं करेगा। अगर मैं कहीं और स्पर्श करना शुरू करता हूं, जैसे बटन या रिक्त स्थान, स्क्रॉल व्यू ठीक से स्क्रॉल करता है। ऐसा लगता है कि विज्ञापन किसी भी तरह टच घटनाओं पर नियंत्रण ले रहा है।

मैंने विज्ञापनों के ऊपर एक पारदर्शी UIView बनाने जैसे सभी प्रकार के फ़िक्स का प्रयास किया है, जो काम नहीं करते क्योंकि नल पंजीकृत नहीं होंगे।

मैंने GADBannerView के सबव्यूज़ के माध्यम से लूपिंग करने का प्रयास किया है, लेकिन सभी सबव्यूज़ के वर्ग AdMob या पहुंच से वंचित प्रतीत होते हैं। (GADWebView, _UIWebViewScrollView)

मैंने यह देखने के लिए कि यह वहां स्क्रॉल करेगा या नहीं, यह देखने के लिए मैंने UITableView में विज्ञापन जोड़ने का भी प्रयास किया था, लेकिन यह काम नहीं करता था।

मेरा व्यू कंट्रोलर क्लास काफी बड़ा है इसलिए यदि आपको कुछ कोड पोस्ट करने की आवश्यकता है, तो मैं समस्या का प्रदर्शन करने के लिए नमूना ऐप बना सकता हूं। GADBannerView का उपयोग करने के बजाय HTML विज्ञापन कोड के साथ UIWebViews बनाने के लिए अभी एक वर्कअराउंड है। मैंने इसका परीक्षण किया है और यह काम करता है, लेकिन मैं वास्तव में देशी विधि की कार्यक्षमता खोना नहीं चाहता हूं।

यदि आप GADBannerView पर स्पर्श करना शुरू करते हैं और विज्ञापन को क्लिक करने योग्य रहने की अनुमति देते हैं तो UIScrollView को स्क्रॉल करने का कोई तरीका है?

धन्यवाद!

उत्तर

0

दुर्भाग्य से स्क्रॉलिंग इशारा को ओवरराइड करने का कोई तरीका नहीं है लेकिन विज्ञापन के लिए स्पर्श इशारा बनाए रखें। GADBannerView को स्वयं ही सभी संकेतों को नियंत्रित करने की आवश्यकता है। प्रोग्रामिंग रूप से GADBannerView पर क्लिक भेजने का कोई तरीका नहीं है, इसलिए आप स्पर्श व्यवहार को ओवरराइड नहीं कर सकते हैं।

मैं आपके UIScrollView से बहुत छोटे विज्ञापनों का उपयोग करने की अनुशंसा करता हूं, इसलिए आपको किसी विज्ञापन पर स्क्रॉल करने के बारे में चिंता करने की आवश्यकता नहीं है।

+0

यही मैंने सोचा लेकिन सोचा कि मैं वैसे भी पूछूंगा। जानकारी के लिए धन्यवाद। –

+3

दरअसल, यह संभव है। [इस धागे में जैकब जेनिंग का जवाब देखें] (http://stackoverflow.com/a/10274683/1914)। –

9

यह समस्या UIScrollView उपवर्गीकरण, UIGestureRecognizerDelegate प्रोटोकॉल के अनुरूप है, और से

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

हाँ लौटने आप प्रतिनिधि निर्धारित करने की आवश्यकता नहीं होनी चाहिए द्वारा हल किया जा सकता है; UIScrollView को डिफ़ॉल्ट रूप से इसके इशारे पहचानकर्ताओं के प्रतिनिधि के रूप में सेट कर दिया गया है।

+1

इसे uitabelview के लिए काम करने के लिए नहीं मिल सकता है :( –

+0

@SjoerdPerfors को UITableViews पर काम करने के लिए एक समाधान मिला? –

+0

@JayQ। ठीक है, मैंने इसे अभी तक नहीं देखा है, इसलिए यदि वर्ग स्वाइप करने योग्य बैनर चला गया है I पता नहीं। http://stackoverflow.com/a/20521939/981968 –

3

समस्या GADBannerView द्वारा उपयोग किए गए UIWebView में जेस्चर पहचानकर्ता और GADBAnnerView में एक कस्टम पहचानकर्ता के बीच एक संघर्ष है। UIScrollView उपवर्गीकरण और इशारा पहचानकर्ता प्रतिनिधि को बदलने के बिना, आप इस कदम पहचानकर्ता को हटाने और इस के साथ कस्टम पहचानकर्ता के लिए प्रतिनिधि के रूप में अपने ऑब्जेक्ट सेट कर सकते हैं:

- (void)preventBannerCaptureTouch:(GADBannerView*)bannerView 
{ 
    for (UIWebView *webView in bannerView.subviews) { 
     if ([webView isKindOfClass:[UIWebView class]]) { 

      for (UIGestureRecognizer *gestureRecognizer in webView.gestureRecognizers) { 
       if ([gestureRecognizer isKindOfClass:NSClassFromString(@"GADImpressionTicketGestureRecognizer")]) { 
        gestureRecognizer.delegate = self; 
       } 
      } 

      for (id view in [[[webView subviews] firstObject] subviews]) { 
       if ([view isKindOfClass:NSClassFromString(@"UIWebBrowserView")]) { 
        for (UIGestureRecognizer *recognizer in [view gestureRecognizers]) { 
         if ([recognizer isKindOfClass:NSClassFromString(@"UIWebTouchEventsGestureRecognizer")]) { 
          [view removeGestureRecognizer:recognizer]; 
         } 
        } 
        return; 
       } 
      } 
     } 
    } 
} 

तो फिर तुम एक साथ पहचान के लिए अनुमति देने के लिए एक साथ इशारा पहचानकर्ता प्रतिनिधि को लागू करना चाहिए:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
+0

यह सही बात है! – mariusLAN

+0

यह सबसे सुंदर दिखने वाला समाधान नहीं हो सकता है, लेकिन यह UIScrollView को उपclass करने की आवश्यकता के बिना काम करता है। – jfuellert

+0

यह मुझे अब एक स्क्रॉल करने योग्य बनाता है एक स्क्रॉल करने योग्य टेबलव्यू के बजाय बैनर। –

2

डीएफपी के लिए आप एक DFPBannerView के बजाय एक DFPSwipeableBannerView उपयोग कर सकते हैं। सुनिश्चित नहीं है कि ऑरगिनल GADBanner कैसे काम करता है, लेकिन यह वही होना चाहिए। UITableView में काम करता है।

id webBrowserView = [[[[[[adView subviews] firstObject] subviews] firstObject] subviews] firstObject]; 

for (UIGestureRecognizer *gestureRecognizer in [webBrowserView gestureRecognizers]) 
{ 
    [gestureRecognizer setDelegate:self]; 
} 

तो बस हाँ में वापसी:

+0

क्या कोई जानता है कि हमें भविष्य में क्या करना है, अब Google ने DFPSwipeableBannerView को बहिष्कृत कर दिया है रिलीज नोट्स में इसका उल्लेख किए बिना एक बग फिक्स रिलीज में? नहीं वें मैं कड़वा हूँ ... –

+0

@ समीसामुरी क्या आपको इसके लिए समाधान मिला है? –

+0

@JayQ। मैं अभी डीएफपीबैनर व्यू का उपयोग कर रहा हूं। यह वही व्यवहार करना चाहिए और मेरे लिए ठीक काम कर रहा है। अगर उन्होंने उल्लेख किया था कि उस समय मैं इसके बारे में परेशान नहीं होता। –

0

मैं GADBannerView में नीचे खुदाई और अपने खुद के दृश्य के लिए अपने वेब ब्राउज़र दृश्य इशारों के लिए प्रतिनिधि की स्थापना और फिर बस सब एक साथ इशारा से निपटने के लिए हाँ वापस लौट कर इस हल निम्नलिखित प्रतिनिधि विधि:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
0

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

- (void)disableBannerBounce:(GADBannerView*)bannerView{ 
    for (UIWebView *webView in bannerView.subviews) { 
     if ([webView isKindOfClass:[UIWebView class]]) { 

      webView.scrollView.bounces = NO;  
     } 
    } 
} 
2

मैं ऊपर जवाब में से दो गठबंधन करने के लिए किया था:

for (UIWebView *webView in bannerView_.subviews) { 
     if ([webView isKindOfClass:[UIWebView class]]) { 
      adView = webView; 
     } 

     for (id view in [[[webView subviews] firstObject] subviews]) { 
      if ([view isKindOfClass:NSClassFromString(@"UIWebBrowserView")]) { 
       for (UIGestureRecognizer *recognizer in [view gestureRecognizers]) { 
        if ([recognizer isKindOfClass:NSClassFromString(@"UIWebTouchEventsGestureRecognizer")]) { 
         [view removeGestureRecognizer:recognizer]; 
        } 
       } 
      } 
     } 
     webView.scrollView.scrollEnabled = NO; 
     webView.scrollView.bounces = NO; 

    } 

कहाँ bannerView_ एक GADBannerView

2

जब एक DFPBannerView contentView की एक subview के रूप जोड़ने की कोशिश कर रहा इस मुद्दे में भाग है एक तालिका दृश्य में एक कस्टम सेल का।

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

मेरी इच्छा है कि मैं यह समझाऊं कि यह क्यों काम करता है, लेकिन यह एक आईओएस रहस्य बना हुआ है।