iAd оставил белый пустой экран после закрытия - PullRequest
3 голосов
/ 02 июля 2010

У меня проблема с интеграцией iAd в мои приложения для iPhone - баннерная реклама хороша, когда она расходуется (см. http://www.clingmarks.com/iAd1.png и http://www.clingmarks.com/iAd2.png),, однако, когда я закрываю ее, она оставляет белый цвет пустой экран (см. http://www.clingmarks.com/iAd3.png). Я не мог понять, почему. Вот как я интегрирую объявление:

Поскольку мне нужно поддерживать другие объявления для более низких версий ОС iPhone, я добавляю контейнерное представление вверху приложений, контроллер представления которых - AdViewController. Когда представление загружено, я создаю AdBannerView программным способом и добавляю его как подпредставление в AdViewController.view. Вот код в методе viewDidLoad:

Class adClass = (NSClassFromString(@"ADBannerView"));
if (adClass != nil) {
    iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    iAdView.frame = CGRectOffset(iAdView.frame, 0, -50);
    iAdView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifier320x50];
    iAdView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
    iAdView.delegate = self;
    iadViewIsVisible = NO;
    [self.view addSubview:iAdView];
} else {
       // init google adsense
    }

Ниже приведены методы делегата:

enter code here
- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
if (!iadViewIsVisible) {
    [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
    // banner is invisible now and moved out of the screen on 50 px
    banner.frame = CGRectOffset(banner.frame, 0, 50);
    [UIView commitAnimations];
    iadViewIsVisible = YES;
}
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
if (iadViewIsVisible) {
    [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
    // banner is visible and we move it out of the screen, due to connection issue
    banner.frame = CGRectOffset(banner.frame, 0, -50);
    [UIView commitAnimations];
    iadViewIsVisible = NO;
}
}

Ответы [ 3 ]

4 голосов
/ 03 июля 2010

В конце концов я понял это сам. Оказывается, родительское представление ADBannerView должно быть полноэкранным представлением. В моем случае выше, я добавил AdBannerView к моему adView, который является видом с размером 320x50. Когда я изменил родительский вид на полноэкранный режим, все работает. Я не уверен, что это ошибка в iAd, но, конечно, что-то хитрое.

1 голос
/ 16 марта 2011

Привет, Дэвид!Я знаю, что вы имеете в виду, я также использую собственный AdvertisingViewController, который вызывает разные рекламные сети.

То есть iAd не в полноэкранном режиме, а в представлении 320x50.

Просто сделайте это:

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

[self.view setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 50.0f)];

}

Поэтому размер контейнера внешнего вида (self.view) изменяется до его исходного размера.iAd изменяет его размер на полноэкранный, чтобы показывать объявление при показе iAd.

1 голос
/ 18 июля 2010

Когда баннер заканчивается, он перемещается в верхнюю часть экрана, даже если это означает наличие отрицательной координаты y.Я центрирую баннер, когда он заканчивается.В моем случае есть контроллер просмотра только для баннера, поэтому при нажатии на объявление он отображается только на весь экран.

-(void) bannerViewActionDidFinish:(UIView *)inBanner {
    CGRect                      frame = [inBanner frame];

    frame.origin.x = frame.size.width * 0.5;
    frame.origin.y = frame.size.height * 0.5;

    [inBanner setCenter:frame.origin];
}
...