2011-04-26 12 views
8

Tengo un iAd que se muestra en la parte superior de una vista en pantalla completa de la vista principal. El iAd funciona normalmente en modo retrato, y he manejado la rotación de la vista de banner iAd en modo paisaje. El problema ocurre cuando el usuario toca el iAd en modo horizontal. El anuncio de prueba se muestra en vertical, de lado en el teléfono, y cuando el usuario toca la x para cerrar el iAd, la vista de pancarta y su vista principal se desplazan fuera de pantalla. El iAd se comporta normalmente en modo vertical (es decir, al tocarlo y al cerrarlo, la vista que contiene el cartel se visualiza normalmente).iAd Landscape Strange View Behavior

cosas que he intentado:

- (void)bannerViewActionDidFinish:(ADBannerView *)banner{ 
NSLog(@"Ad was closed, show the adView again"); 
if(UIInterfaceOrientationIsLandscape(currentInterfaceOrientation)){ 
    [self animateRotationToLandscape:0.3f]; 
} 
else{ 
    [self animateRotationToPortrait:0.3f]; 
} 
} 

-(void)animateRotationToPortrait:(NSTimeInterval)duration{ 
    self.adView.currentContentSizeIdentifier = 
    ADBannerContentSizeIdentifierPortrait; 

    BOOL iPad = NO; 
    #ifdef UI_USER_INTERFACE_IDIOM 
    iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); 
    #endif 

    if (iPad) { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:duration]; 
     proUpgradeDescription.frame = CGRectMake(82,313,604,110); 
     proUpgradePrice.frame = CGRectMake(313,576,142,28); 
     closeButton.frame = CGRectMake(348,834,72,37); 
     purchaseButton.frame = CGRectMake(313,431,142,142); 
     [UIView commitAnimations]; 
    } 
    else{ 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:duration]; 
     proUpgradeDescription.frame = CGRectMake(20,80,280,70); 
     proUpgradePrice.frame = CGRectMake(88,322,142,28); 
     closeButton.frame = CGRectMake(123,403,72,37); 
     purchaseButton.frame = CGRectMake(88,172,142,142); 
     [UIView commitAnimations]; 
    } 
} 

que se pide el código que utilizo para animar la rotación de la pantalla de modo vertical y horizontal. Este código no tiene efecto.

Si alguien tiene alguna idea de por qué los anuncios de prueba no giran correctamente y por qué empujan el controlador de vista principal fuera de la pantalla, lo agradecería mucho.

+0

¿Dónde está su código animadoRotationToLandscape? –

+0

@wasabi ¿ha enviado su aplicación? ¿lo aceptaron? ¿Sus anuncios se muestran correctamente cuando se descargan de la tienda de aplicaciones? – 4GetFullOf

Respuesta

5

No sé si esto resuelve todos sus problemas, pero de acuerdo con la respuesta en this question, los anuncios de prueba solo aparecen en vertical, y los anuncios reales aparecerán en ambas orientaciones.

+0

¿Crees que debería enviar mi aplicación a la tienda de aplicaciones y esperar que esto no sea un problema en la versión implementada? No tengo forma de probar iAd antes de la presentación de la tienda de aplicaciones. – wasabi

+0

@wasabi ¿ha enviado su aplicación? ¿lo aceptaron? ¿Sus anuncios se muestran correctamente cuando se descargan de la tienda de aplicaciones? – 4GetFullOf

+2

@Rookie sí, la respuesta aceptada es correcta. Los anuncios funcionaron correctamente en orientación horizontal en la tienda de aplicaciones. Terminé eliminando iAds ya que eran intrusivos para el UX. – wasabi

0

Sé que la pregunta es un poco antigua, así que estoy publicando aquí en caso de que alguien se encuentre con el mismo problema (lo hice).

ADBannerView se confunde con el marco y las propiedades de transformación de la vista principal, por lo que todo lo que tiene que hacer es restablecerlas a sus valores originales una vez que haya finalizado (en bannerViewActionDidFinish:).

Todavía no entiendo por qué no vuelve a poner todo como estaba después de que ha terminado. No deberíamos tener que hacer esto.

+0

¿Puede poner más contexto? cómo volver a ponerlo? – ColdSteel

0

Esto me volvió loco también. Entregar solo anuncios de página completa en el iPad y retratos al iPhone, y no decirlo, es buscar problemas. Dejé de usar el código iAdSuite, lo que provocó que el iPad de Landscape abandonara la pantalla en Horizontal incluso cuando el dispositivo estaba en retrato.

Este es mi código para anuncios de banner. Todo está en el controlador de la primera vista cargada. Su objetivo es colocar el banner en la parte inferior de la pantalla.

En el archivo de cabecera:

#import "iAd/ADBannerView.h" 

@property (strong, nonatomic) ADBannerView* adView; 

@interface myViewController : UIViewController <ADBannerViewDelegate, 

en viewDidLoad

CGRect contentFrame = self.view.bounds; 
CGRect bannerFrame = CGRectZero; 
bannerFrame.size = [adView sizeThatFits:contentFrame.size]; 
bannerFrame.origin.y = contentFrame.size.height-bannerFrame.size.height; 
adView = [[ADBannerView alloc] initWithFrame:bannerFrame]; 
[adView setDelegate:self]; 
[self.view addSubview:adView]; 

Entonces

-(void)viewWillLayoutSubviews { 
     CGRect contentFrame = self.view.bounds; 
     CGRect bannerFrame=CGRectZero; 
     bannerFrame.size = [adView sizeThatFits:contentFrame.size]; 
     if (adView.bannerLoaded) {bannerFrame.origin.y = contentFrame.size.height-bannerFrame.size.height;} 
     else {bannerFrame.origin.y = contentFrame.size.height;} 
     [adView setFrame:bannerFrame];} 

Luego de manejar las devoluciones de llamada iAd necesitamos decirle a la vista de rehacer su trazado si algo cambia:

- (void)bannerViewDidLoadAd:(ADBannerView *)banner{ 
[UIView animateWithDuration:0.25 animations:^{ 
    [self.view setNeedsLayout]; 
    [self.view layoutIfNeeded]; 
}];} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 
[UIView animateWithDuration:0.25 animations:^{ 
    [self.view setNeedsLayout]; 
    [self.view layoutIfNeeded]; 
}];} 

Esto parece manejar la orientación correctamente tanto en iPad como en iPhone a excepción de los anuncios de prueba de página completa. Sin embargo, la pantalla asume la orientación correcta después de que se rechaza el anuncio de prueba, así que espero que todo esté bien.

+0

En su código para viewDidLoad, está inicializando adView después de llamar a [adView sizeThatFits: contentFrame.size]. ¿No es adView nil en ese punto? – ldanilek

+0

self.adView = [[ADBannerView alloc] initWithAdType: ADAdTypeBanner]; [self.view addSubview: self.adView]; CGRect contentFrame = self.view.bounds; CGRect bannerFrame = CGRectZero; bannerFrame.size = [self.adView sizeThatFits: contentFrame.size]; bannerFrame.origin.y = contentFrame.size.height-bannerFrame.size.height; [self.adView setFrame: bannerFrame]; – ldanilek

+0

Disculpa la demora Creo que adView, aunque no tiene contenido, es un AdBannerView y, por lo tanto, devuelve un tamaño. Parece que funciona, voy a ejecutar el depurador sobre él en algún momento para ver qué se trata. – Tim