以编程方式添加GADBannerView

时间:2014-02-13 16:36:19

标签: ios objective-c admob

我创建了一个类作为AdMobViewController,我用它来添加这个类的横幅。横幅创建但视图中的其他对象不向上滚动。我如何以编程方式向上滚动视图中的所有对象。

我的AdMobViewController类和方法:

+ (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];
}

我用它来创建横幅:

[AdMobViewController createBanner:self];

5 个答案:

答案 0 :(得分:7)

工作样本副本在这里:

使用:[AdMobViewController createBanner:self];

#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

答案 1 :(得分:0)

我觉得你有很多事情需要考虑:

  1. [sender.view addSubview:bannerView]不会移动其他观看次数, 相反,您将横幅视图直接放在视图的顶部 层次结构。

  2. 广告是异步加载的,因此您应该实现委托 用于显示和隐藏广告视图的GADBannerView方法。

  3. 如果您真的想要移动其他视图,请使用一些 一种容器视图,包括除了你的所有其他内容 旗帜。如果您收到广告,则可以轻松移动容器视图 (或缩小它)并在你的某个位置显示你的横幅视图 主要观点。

  4. 干杯

答案 2 :(得分:0)

在委托回调adViewDidReceiveAd:内,检查广告的尺寸并相应地移动您的观看次数

答案 3 :(得分:0)

这对我有用:

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];

答案 4 :(得分:0)

这是旁白,因为我的问题看起来很相似,但事实并非如此。

应用ID 广告单元ID 相同。

而且,愚蠢的是,他们同时从 ca-app-pub - 和很多数字开始。我使用的是App ID,我可以保证 100%不起作用。

是的,我觉得很傻,但谷歌的人应该让他们不一样。

但是,如果您使用广告单元ID,令人惊讶的是,一切正常。 :)