2012-10-08 21 views
5

Uygulamamda iAdSuite sekme çubuğu görünümü uygulamasını dahil etmeye çalışıyorum ve aynı sorunu bende ve uygulamamda görüyorum. Reklam göründüğünde, içeriğimin görünümü düzgün bir şekilde yeniden boyutlandırılıyor ve reklam doğru bir şekilde görünüyor. Reklam daha sonra kaybolduğunda, bulunduğu yerde beyaz boşluk bırakır. Bununla birlikte, içerik görünümümün orijinal boyuna yeniden boyutlandırıldığını ve orijinal sınırlarına çekildiğini doğruladım. Reklamın bulunduğu yeri göremezsiniz. Her görüntünün bir plana uyup uymadığından emin oldum ve hemen hiçbir şey düşünemedim. Düşüncesi olan var mı?iAdSuite hatası, reklam kaybolduğunda beyaz boşluk bırakıyor

enter image description here

Düzenleme: Sorunun ne olduğunu anladım. Apple'ın örneği görünüşte her zaman showBannerView: self.view için _bannerView ekler: çağrılır, ancak asla görünümü kaldırır. Bu, banner görünümü ekran dışına taşındığı için hala tam anlam ifade etmiyor, ancak bunu kaldırmak, beyaz alan problemini çözüyor. Benim çözümüm şu şekildedir, ama eğer daha zarif bir yolu varsa, bana bildirin.

- (void)layoutAnimated:(BOOL)animated { 

    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
    } else { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape; 
    } 

    CGRect contentFrame = self.view.bounds; 
    contentFrame.origin = CGPointMake(0.0, 0.0); 
    CGRect bannerFrame = _bannerView.frame; 
    if (_bannerView.bannerLoaded) { 
     contentFrame.size.height -= _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } else { 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     _contentView.frame = contentFrame; 
     [_contentView layoutIfNeeded]; 
     _bannerView.frame = bannerFrame; 
    } 
        completion:^(BOOL finished) { 
         if (!_bannerView.bannerLoaded) { 
          [_bannerView removeFromSuperview]; 
          _bannerView=nil; 
         } 
        }]; 
} 

- (void)showBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    _bannerView = bannerView; 
    if (![self.view.subviews containsObject:_bannerView]) 
     [self.view addSubview:_bannerView]; 
    [self layoutAnimated:animated]; 
} 

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated]; 
} 

cevap

0

Aynı problem vardı. Bannerview'ın hideBannerView delegesi yöntemindeki süper görünümden kaldırılması, onu çözmüş görünüyor.

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated]; 
    [_bannerView removeFromSuperview]; 
    _bannerView = nil; 
} 
0

Bu soru ve cevap için teşekkürler, bununla kılları çekiyordum. Bu lanet kodu değiştirdim ve şimdi de gizleme animasyonu çalışıyor. Apple neden buggy örnek kodunu yayınladığını merak ediyorum ...

- (void)layoutAnimated:(BOOL)animated hide:(BOOL)hide 
{ 
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
    } else { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape; 
    } 

    CGRect contentFrame = self.view.bounds; 


    CGRect bannerFrame = _bannerView.frame; 
    if (!hide) { 
     contentFrame.size.height -= _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } else { 
     contentFrame.size.height += _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     _contentView.frame = contentFrame; 
     [_contentView layoutIfNeeded]; 
     _bannerView.frame = bannerFrame; 
    } completion:^(BOOL finished) { 
     if (hide) { 
      [_bannerView removeFromSuperview]; 
      _bannerView=nil; 
     } 
    }]; 
} 

- (void)showBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    _bannerView = bannerView; 
    [self.view addSubview:_bannerView]; 
    [self layoutAnimated:animated hide:NO]; 
} 

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated hide:YES]; 

} 
İlgili konular