Как AdBannerView совместно используется несколькими представлениями, включая rootviewcontroller? - PullRequest
2 голосов
/ 05 августа 2011

Ответов пока нет, но у меня есть обновление, которое, похоже, устранило проблему, есть идеи, почему оно работает сейчас?!

У меня естьэто работает так, как я намеревался, выполнив следующие действия для каждого класса, который должен отображать рекламный баннер:

1.В метод layoutForCurrentOrientation I добавлено следующее:

adBanner.delegate = self;

[self.view addSubview:adBanner];

2.В методе deAlloc для каждого класса я удалил следующее:

[adBanner removeFromSuperview];

Исходный вопрос:

IЯ пытаюсь использовать пример кода iAdSuite от Apple, чтобы использовать один экземпляр adBanner, общий для всех моих представлений.

Пример реализации предназначен для показа adbanner в каждом представлении, которое вызывается rootViewController, однакоМне бы хотелось, чтобы в моем приложении также отображалась реклама в представлении rootViewController.

В моем исправленном коде: -

Когда я запускаю приложение, баннер не отображается наrootView, хотя вызывается метод для запроса рекламного баннера.Класс устанавливается в качестве делегата для объявления, а методы делегата доступны.Они называются, и журнал для (adBanner.bannerLoaded) НЕТ.

Поскольку это общий объект, если я переключаю представления на rootView, объявление отображается в другом представлении.Когда я возвращаюсь обратно в rootView, журнал метода делегата показывает, что баннер загружен, и он расположен в видимой части представления.Но баннер не виден.

Итак, я использую пример кода iAdSuite для проекта AdBannerNavigation и пытаюсь использовать его так, чтобы рекламные баннеры отображались во всех представлениях, включая rootViewController.

Любая помощь приветствуется!

Код, который я использую, доступен здесь:

http://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html

Мой исправленный rootViewController.h:

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@interface RootViewController : UITableViewController <ADBannerViewDelegate>

@end

Мой исправленный rootViewController.m

#import "RootViewController.h"
#import "TextViewController.h"
#import "MapViewController.h"

#import "AdBannerNavigationAppDelegate.h" 
// for SharedAdBannerView macro
// #define SharedAdBannerView ((AdBannerNavigationAppDelegate *)[[UIApplication sharedApplication] delegate]).adBanner

#import <iAd/iAd.h>


@interface RootViewController()

// Layout the Ad Banner and Content View to match the current orientation.
// The ADBannerView always animates its changes, so generally you should
// pass YES for animated, but it makes sense to pass NO in certain circumstances
// such as inside of -viewDidLoad.
- (void)layoutForCurrentOrientation:(BOOL)animated;

// A simple method that creates an ADBannerView
// Useful if you need to create the banner view in code
// such as when designing a universal binary for iPad
- (void)createADBannerView;

@end




- (void)viewDidLoad
{
    [super viewDidLoad];
    [self createADBannerView];
    [self layoutForCurrentOrientation:NO];
}


- (void)viewDidUnload
{

    ADBannerView *adBanner = SharedAdBannerView;
    adBanner.delegate = nil;
    [adBanner removeFromSuperview];

}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self layoutForCurrentOrientation:NO];
}


- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self layoutForCurrentOrientation:YES];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}



- (void)dealloc
{

    ADBannerView *adBanner = SharedAdBannerView;
    adBanner.delegate = nil;
    [adBanner removeFromSuperview];

    [super dealloc];
}





- (void)createADBannerView
{

    ADBannerView *adBanner = SharedAdBannerView;


    NSString *contentSize;
    if (&ADBannerContentSizeIdentifierPortrait != nil)
    {
        contentSize = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifierLandscape;
    }
    else
    {

        contentSize = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? ADBannerContentSizeIdentifier320x50 : ADBannerContentSizeIdentifier480x32;
    }


    CGRect frame;
    frame.size = [ADBannerView sizeFromBannerContentSizeIdentifier:contentSize];
    frame.origin = CGPointMake(0.0f, CGRectGetMaxY(self.view.bounds));

    adBanner.frame = frame;


    adBanner.delegate = self;

    adBanner.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;

    adBanner.requiredContentSizeIdentifiers =
    (&ADBannerContentSizeIdentifierPortrait != nil) ?
    [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil] : 
    [NSSet setWithObjects:ADBannerContentSizeIdentifier320x50, ADBannerContentSizeIdentifier480x32, nil];


    [self.view addSubview:adBanner];


   }






- (void)layoutForCurrentOrientation:(BOOL)animated
{
    ADBannerView *adBanner = SharedAdBannerView;



    CGFloat animationDuration = animated ? 0.2f : 0.0f;

    CGRect contentFrame = self.view.bounds;

    CGPoint bannerOrigin = CGPointMake(CGRectGetMinX(contentFrame), CGRectGetMaxY(contentFrame));
    CGFloat bannerHeight = 0.0f;


    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
        adBanner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierLandscape != nil) ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifier480x32;
    else
        adBanner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierPortrait != nil) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifier320x50; 
    bannerHeight = adBanner.bounds.size.height;


    if (adBanner.bannerLoaded)
    {
        contentFrame.size.height -= bannerHeight;
        bannerOrigin.y -= bannerHeight;
    }
    else
    {
        bannerOrigin.y += bannerHeight;
    }


    [UIView animateWithDuration:animationDuration
                     animations:^{

                         adBanner.frame = CGRectMake(bannerOrigin.x, bannerOrigin.y, adBanner.frame.size.width, adBanner.frame.size.height);
                     }];


    NSLog(@"%f is y pos, height=%f, is it loaded...%@", adBanner.frame.origin.y, adBanner.frame.size.height, adBanner.bannerLoaded?@"YES":@"NO");

}



- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    [self layoutForCurrentOrientation:YES];
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    [self layoutForCurrentOrientation:YES];
}

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
    return YES;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{

}


@end
...