如何在选项卡控制器上正确放置iAd横幅?

时间:2015-08-19 02:01:21

标签: ios objective-c iad

我正在尝试在TabBar顶部添加一个iAd横幅,它位于屏幕底部上方50pts处,但出于某种原因,每次刷新后横幅都会在屏幕上向上移动50pts。

我在tabBarViewController中用这种方式初始化它:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    _adBanner = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 50, 320, 50)];

    _adBanner.delegate = self;
}

我把它放在这样的地方:

String.format("%04d", 1);

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

您使用的代码是实现ADBannerView的一种旧方法。您的ADBannerView在屏幕上垂直移动的原因是由于此行banner.frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height);。每次从iAd网络收到新广告时,它会将您的ADBannerView y位置抵消50分。我假设你bannerView:didFailToReceiveAdWithError:中没有正确设置_bannerIsVisible,我应该{I} _bannerIsVisible = NO。此外,您应该在ADBannerView而不是viewDidLoad中创建viewDidAppear一次,因为这很可能会在您的应用会话中被多次调用。

或者,您可以根据ADBannerView的位置设置UITabBar的排名。然后,当您未收到来自iAd的广告时,您可以将其设为view动画或完全隐藏ADBannerView。您应该根据ADBannerView的尺寸来设置view尺寸。现在可以使用所有不同的屏幕尺寸,以及将来可以使用的更多尺寸,以这种方式进行设置将确保在引入新设备时,ADBannerView继续以最少的维护工作。

这是我建议的一个例子。我已经对其中的大部分内容进行了评论。如果您需要进一步澄清,请与我们联系。

#import "ViewController.h"
@import iAd; // Import iAd

@interface ViewController () <ADBannerViewDelegate> // Include delegate
// Outlet to a UITabBar I created in Interface Builder
@property (weak, nonatomic) IBOutlet UITabBar *myTabBar;
@end

@implementation ViewController {
    ADBannerView *iAdBannerView;
}

-(void)viewDidLoad {
    [super viewDidLoad];

    iAdBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    iAdBannerView.frame = CGRectMake(0, // x = 0
                                     self.view.frame.size.height - self.myTabBar.frame.size.height - iAdBannerView.frame.size.height,
                                     // y = get the height of our view, subtract the height of our UITabBar, subtract the height of our ADBannerView
                                     self.view.frame.size.width, // width = stretch our ADBannerView across the width of our view
                                     iAdBannerView.frame.size.height); // height = height of our ADBannerView
    iAdBannerView.alpha = 0.0; // Hide our ADBannerView initially because it takes a second to receive an ad
    iAdBannerView.delegate = self; // Set its delegate
    [self.view addSubview:iAdBannerView]; // Add it to our view
}

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    NSLog(@"bannerViewDidLoadAd");

    // Fade in our ADBannerView
    [ADBannerView animateWithDuration:0.2
                            delay:0
                          options:0
                       animations:^{
                           iAdBannerView.alpha = 1.0;
                       }
                       completion:^(BOOL finished) {
                           if (finished) {
                               // If you wanted to do anything once the animation finishes
                           }
                       }];
}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    NSLog(@"didFailToReceiveAdWithError: %@", error);

    // Fade out our ADBannerView
    [ADBannerView animateWithDuration:0.2
                            delay:0
                          options:0
                       animations:^{
                           iAdBannerView.alpha = 0.0;
                       }
                       completion:^(BOOL finished) {
                           if (finished) {
                           }
                       }];
}

您还应该熟悉这些Apple文档:ADBannerViewDelegateCGRectOffsetviewDidAppearframe