2011-04-26 27 views
8

我有一個iAd,它顯示在主視圖的全屏子視圖的頂部。 iAd通常以縱向模式工作,我已將iAd橫幅視圖的旋轉處理爲橫向模式。用戶在橫向模式下輕敲iAd時會發生此問題。測試廣告以縱向顯示,橫向顯示在手機上,當用戶點擊x以關閉iAd時,橫幅視圖及其父視圖將被推出屏幕外。 iAd在縱向模式下正常運行(即點擊並關閉它會導致包含橫幅的視圖正常顯示)。iAd Landscape奇異視圖行爲

事情我已經嘗試:

- (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]; 
    } 
} 

其中要求,我用動畫顯示旋轉爲縱向和橫向模式的代碼。此代碼無效。

如果任何人有任何想法,爲什麼測試廣告不能正確旋轉,爲什麼他們推動父視圖控制器關閉屏幕,我將不勝感激。

+0

你的animateRotationToLandscape代碼在哪裏? – 2012-02-24 01:59:22

+0

@wasabi你提交你的應用程序?他們接受了嗎?從應用商店下載廣告時,您的廣告是否能正確顯示 – 4GetFullOf 2014-03-16 16:24:28

回答

5

我不知道這是否解決了您的所有問題,但根據this question的回答,測試廣告只是縱向顯示,真正的廣告會顯示在兩個方向。

+0

所以你認爲我應該將應用程序提交給應用程序商店,並希望這不是部署版本的問題?在應用商店提交之前,我無法測試iAd。 – wasabi 2011-04-27 16:52:39

+0

@wasabi你提交你的應用程序?他們接受了嗎?從應用商店下載廣告時,您的廣告是否能正確顯示 – 4GetFullOf 2014-03-16 16:21:43

+2

@Rookie是接受的答案是正確的。廣告在應用商店中以橫向方向正確工作。我最終刪除了iAds,因爲它們侵入UX。 – wasabi 2014-03-18 20:30:51

0

我知道這個問題有點老,所以我在這裏發帖,以防萬一有人遇到同樣的問題(我做過)。

ADBannerView與父視圖的框架和變換屬性混淆,因此您只需在完成後將它們重置爲其原始值(位於bannerViewActionDidFinish:)。

我還是不明白爲什麼它沒有按照它完成後的方式放回所有東西。我們不應該這樣做。

+0

你能否把更多的上下文?如何把它放回去? – ColdSteel 2015-04-18 22:31:09

0

這也使我瘋了。只向iPad提供橫向全頁廣告,並向iPhone提供縱向廣告,而不是這麼說就是要求麻煩。我放棄使用iAdSuite代碼,導致橫向iPad廣告將屏幕留在橫向,即使設備處於縱向狀態!

這是我的橫幅廣告代碼。它全部放在第一個視圖控制器中。它旨在將橫幅放在屏幕的底部。

在頭文件:

在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]; 

然後

#import "iAd/ADBannerView.h" 

@property (strong, nonatomic) ADBannerView* adView; 

@interface myViewController : UIViewController <ADBannerViewDelegate, 

-(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];} 

然後處理來自iAd的回調,我們需要告訴視圖重做其佈局如果有所改變:

- (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]; 
}];} 

除了測試整頁廣告外,這似乎可以在iPad和iPhone上正確處理方向。然而,在測試廣告被解僱後,屏幕會採取正確的方向,所以我希望這一切都可以。

+0

在viewDidLoad的代碼中,您在調用[adView sizeThatFits:contentFrame.size]後正在初始化adView。 adView目前是否爲零? – ldanilek 2014-10-08 18:43:01

+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 2014-10-08 18:47:33

+0

對不起,延遲!我認爲adView雖然沒有內容,但卻是AdBannerView,因此會返回大小。它似乎工作,我會運行調試器在某個時間,看看它是什麼。 – Tim 2015-04-09 16:01:55