2014-02-13 2 views
5

Ich habe eine Klasse als AdMobViewController erstellt und ich füge Banner dieser Klasse hinzu. Banner erstellen, aber andere Objekte in der Ansicht scrollen nicht nach oben. Wie programmiere ich programmgesteuert alle Objekte in Ansicht.GADBannerView programmatisch hinzufügen

Meine AdMobViewController Klasse und Methode:

+ (void)createBanner:(UIViewController *)sender 
{ 
    GADRequest *request = [GADRequest request]; 
    request.testing = YES; 
    request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil]; 

    GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 
    bannerView.adUnitID = @"ca-app-pub-123456"; 
    bannerView.rootViewController = (id)self; 
    bannerView.delegate = (id<GADBannerViewDelegate>)self; 
    bannerView.frame = CGRectMake(0, 518, 320, 50); 

    [bannerView loadRequest:request]; 

    [sender.view addSubview:bannerView]; 
} 

Und ich benutze für die Erstellung von Banner:

[AdMobViewController createBanner:self]; 
+0

Was ist der Unterschied zwischen DFPBannerView und GADBannerView? – abhi1992

Antwort

0

Nun, ich denke, Sie mehrere Dinge zu beachten:

  1. [sender.view addSubview:bannerView] tut nicht andere Ansichten verschieben, Stattdessen platzieren Sie die Banne r Blick direkt auf die Ansicht Hierarchie.

  2. Anzeigen werden asynchron geladen, daher sollten Sie die Delegaten Methoden von GADBannerView zum Anzeigen und Ausblenden der Anzeigenansicht implementieren.

  3. Wenn Sie wirklich andere Ansichten verschieben möchten, sollten Sie einige Art der Containeransicht verwenden, um alle anderen Inhalte außer Ihrem Banner aufzunehmen. Wenn Sie eine Anzeige erhalten, können Sie die Containeransicht einfach verschieben (oder verkleinern) und Ihre Banneransicht an einem bestimmten Ort in Ihrer Hauptansicht anzeigen.

Prost

+0

Danke zu antworten. Wie kann ich programmatisch andere programmgesteuert erstellte Objekte übertragen? –

+0

Können Sie genauer auf Ihre Frage eingehen? – anka

+1

Was ist der Unterschied zwischen DFPBannerView und GADBannerView? – abhi1992

0

Innerhalb der Delegierten Rückruf adViewDidReceiveAd:, die Größe der Anzeige überprüfen und Ihre Ansichten entsprechend ist hier

+0

Was ist der Unterschied zwischen DFPBannerView und GADBannerView? '- (void) adViewDidReceiveAd: (DFPBannerView *) bannerView;' und '- (void) adViewDidReceiveAd: (GADBannerView *) bannerView;' Ich habe beide gesehen. – abhi1992

7

Arbeitsbelegexemplar bewegen:

für die Anwendung: [AdMobViewController createBanner: selbst];

#import "AdMobViewController.h" 
#import "GADBannerView.h" 

@interface AdMobViewController() 

@end 

@implementation AdMobViewController 

static GADBannerView *bannerView; 
static UIView *senderView; 
static UIView *containerView; 
static UIView *bannerContainerView; 
static float bannerHeight; 

+ (void)createBanner:(UIViewController *)sender 
{ 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
    { 
     bannerHeight = 50; 
    } 
    else 
    { 
     bannerHeight = 90; 
    } 

    GADRequest *request = [GADRequest request]; 
    request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil]; 

    bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 
    bannerView.adUnitID = @"ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"; 
    bannerView.rootViewController = (id)self; 
    bannerView.delegate = (id<GADBannerViewDelegate>)self; 

    senderView = sender.view; 

    bannerView.frame = CGRectMake(0, 0, senderView.frame.size.width, bannerHeight); 

    [bannerView loadRequest:request]; 

    containerView = [[UIView alloc] initWithFrame:senderView.frame]; 

    bannerContainerView = [[UIView alloc] initWithFrame:CGRectMake(0, senderView.frame.size.height, senderView.frame.size.width, bannerHeight)]; 

    for (id object in sender.view.subviews) { 

     [object removeFromSuperview]; 
     [containerView addSubview:object]; 

    } 

    [senderView addSubview:containerView]; 
    [senderView addSubview:bannerContainerView]; 
} 

+ (void)adViewDidReceiveAd:(GADBannerView *)view 
{ 
    [UIView animateWithDuration:0.5 animations:^{ 

     containerView.frame = CGRectMake(0, 0, senderView.frame.size.width, senderView.frame.size.height - bannerHeight); 
     bannerContainerView.frame = CGRectMake(0, senderView.frame.size.height - bannerHeight, senderView.frame.size.width, bannerHeight); 
     [bannerContainerView addSubview:bannerView]; 

    }]; 
} 

@end 
+0

perfekte Lösung .. Danke :) –

+0

Sehr gut ... Schöne und einfache Lösung ... Vielen Dank –

+0

Was ist der Unterschied zwischen DFPBannerView und GADBannerView? – abhi1992

0

Das ist für mich gearbeitet:

GADBannerView *gv=[[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 
[self.view addSubview:gv]; 

gv.adUnitID = @"ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"; 
gv.rootViewController = self; 
gv.delegate=(id<GADBannerViewDelegate>)self; 
GADRequest *request = [GADRequest request]; 
// Enable test ads on simulators. 
request.testDevices = @[ GAD_SIMULATOR_ID ]; 
[gv loadRequest:request]; 
0

Dies Nebenbei bemerkt ist, weil mein Problem ähnlich sah, war aber nicht.

App-ID ist NICHT die gleiche wie Ad Unit ID.

Und, dumm, sie beginnen beide mit ca-app-pub- und viele Zahlen. Ich benutzte die App-ID, die ich kann Garantie 100% funktioniert nicht.

Ja, ich fühle mich ziemlich albern, aber die Leute bei Google sollten sie unähnlich gemacht haben.

Wenn Sie jedoch die Anzeigenblock-ID verwenden, funktioniert überraschenderweise alles. :)