Я скрываю свой AdBannerView, но все равно получаю ВНИМАНИЕ! В представлении баннера (0x9c75550) есть реклама - PullRequest
1 голос
/ 01 ноября 2011

Я только что добавил ADBannerview в свое приложение. Я создаю AdBannerView в своем UIApplicationDelegate, чтобы иметь только один его экземпляр, и делюсь им с другим viewController

Все работает отлично, за исключением того, что я получаю предупреждение: ADBannerView: ПРЕДУПРЕЖДЕНИЕ. Представление баннера (0x9c75550) имеет рекламу, но может быть скрыто. Это сообщение печатается только один раз за просмотр баннера.

когда я открываю модальное представление (используя presentModalViewController) поверх представления, в котором в данный момент отображается ADBannerview. Перед открытием модального вида я использую следующий код, чтобы скрыть ADBannerview:

- (void)viewWillDisappear:(BOOL)animated
{
    ADBannerView *bannerView = [ (ScoreBoardAppDelegate*)[[UIApplication sharedApplication] delegate] adBanner];
    [self hideBanner:bannerView];
    [super viewWillDisappear:animated];
}

- (void)hideBanner:(ADBannerView*) adBanner {
    NSLog(@"%s called", __FUNCTION__);

    // Grow the tableview to occupy space left by banner, it's the size of the parent view
    CGFloat fullViewHeight = self.tbView.frame.size.height;
    CGRect tableFrame = self.tv.frame;
    tableFrame.size.height = fullViewHeight;

    // Move the banner view offscreen
    CGRect bannerFrame = adBanner.frame;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    bannerFrame.origin = CGPointMake(CGRectGetMinX(screenBounds), CGRectGetMaxY(screenBounds));

    self.tv.frame = tableFrame;
    adBanner.frame = bannerFrame;
}

Я не понимаю, что делать, чтобы не было этого предупреждающего сообщения. Похоже, что ADBannerView успешно скрыт (за кадром) до отображения модального представления.

Я, наверное, что-то пропустил, но не вижу этого. Спасибо за вашу помощь,

Себастьен.

1 Ответ

1 голос
/ 14 января 2012

Себастьян, я надеюсь, что вы отошли от этого, так как вопрос оставался без ответа в течение стольких месяцев.Недавно я добавил поддержку iAd и нашел это предупреждение довольно раздражающим.Одна из тонкостей совместного использования рекламного баннера заключается в том, что если вы хотите показать его в своем первоначальном контроллере представления, вам придется выполнить большую часть настроек в этом контроллере представления, а не в делегате приложения.

Это viewWillAppear: метод в моем начальном контроллере представления:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (!SharedAdBannerView) {
        // in my app, the ad banner is the bottom-most thing on screen
        CGRect startingFrame = CGRectMake(0.0, self.view.frame.origin.y + self.view.frame.size.height, 320.0, 50.0);
        adBanner = [[ADBannerView alloc] initWithFrame:startingFrame];

        // Set the autoresizing mask so that the banner is pinned to the bottom
        adBanner.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;

        // Since we support all orientations, support portrait and landscape content sizes.
        // If you only supported landscape or portrait, you could remove the other from this set
        adBanner.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, nil];
        adBanner.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;

        adBanner.delegate = self;
        [self.view addSubview:adBanner];
        SharedAdBannerView = adBanner; 
    } else {
        adBanner = SharedAdBannerView;
}

SharedAdBannerView - это макрос, как определено в TN2286, и он использует переменную экземпляра, определенную в делегате приложения (таким образом, он остается общим для всех видов, отображающих iAd).Я также решил анимировать рекламный баннер за пределами экрана, прежде чем удалять его из иерархии представления, поскольку одна сцена переходила к другой.Я прочитал документацию, в которой говорилось, что всякий раз, когда рекламный баннер является частью иерархии представлений, вы получите это сообщение - другими словами, скрытие представления баннера не способ предотвратить появление предупреждающего сообщения.Или, иначе говоря, если этого достаточно, чтобы скрыть рекламный баннер, он не сработал для меня и не помог в устранении неполадок.Я многому научился, когда наткнулся на TN2239, который предлагал этот совет в gdb:

 po [[self view] recursiveDescription];

Вы должны настроить объект, которому вы отправляете сообщение recursiveDescription, в зависимости от того, где вы разместили свою точку останова, но, вероятно, [selfвид] в порядке.

...