以编程方式添加GADBannerView

5
我创建了一个名为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];

DFPBannerView和GADBannerView有什么区别? - abhimuralidharan
5个回答

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

完美的解决方案。谢谢 :) - Hardik Thakkar
DFPBannerView和GADBannerView有什么区别? - abhimuralidharan

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

0

我认为你需要考虑多个方面:

  1. [sender.view addSubview:bannerView] 不会移动其他视图,而是直接将横幅视图放置在视图层次结构的顶部。

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

  3. 如果您真的想移动其他视图,您应该使用某种容器视图来包含除了您的横幅以外的所有其他内容。如果您收到广告,您可以轻松地移动容器视图(或缩小它),并在主视图中的某个位置显示您的横幅视图。

干杯


感谢您的回复。我如何在程序中转移其他程序创建的视图中的对象? - Yasin Uğur Yıldız
你能否更具体地阐述你的问题? - anka
1
DFPBannerView 和 GADBannerView 有什么区别? - abhimuralidharan

0
在委托回调函数adViewDidReceiveAd:中,检查广告的大小并相应地移动您的视图。

DFPBannerView和GADBannerView有什么区别?我看到它们都有- (void)adViewDidReceiveAd:(bannerView *)方法。 - abhimuralidharan

0

这是一个附言,因为我的问题看起来相似,但实际上不是同样的问题。

应用程序 ID广告单元 ID 不同。

而且,愚蠢的是,它们都以 ca-app-pub- 和一堆数字开头。我正在使用 App ID,我可以保证 100% 不起作用。

是的,我感到很傻,但 Google 的工作人员应该使它们不同。

但是,如果您使用广告单元 ID,则一切都出奇地正常。 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接