2013-02-10 51 views
0

目前我使用此代碼來加載iAD橫幅。iAD底部視圖,當改變方向

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    adView = [[ADBannerView alloc] initWithFrame:CGRectZero]; 
    CGRect adFrame = adView.frame; 
    adFrame.origin.y = self.view.frame.size.height; 
    adView.frame = adFrame; 

    [adView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

    [self.view addSubview:adView]; 
    adView.delegate=self; 

    self.bannerIsVisible=NO; 

} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    if (!self.bannerIsVisible) 
    { 
     [UIView beginAnimations:@"animateAdBannerOn" context:NULL]; 

     CGRect adFrame = adView.frame; 
     adFrame.origin.y = self.view.frame.size.height-adView.frame.size.height; 
     adView.frame = adFrame; 

     [UIView commitAnimations]; 
     self.bannerIsVisible = YES; 
    } 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    if (self.bannerIsVisible) 
    { 
     [UIView beginAnimations:@"animateAdBannerOff" context:NULL]; 

     CGRect adFrame = adView.frame; 
     adFrame.origin.y = self.view.frame.size.height+adView.frame.size.height; 
     adView.frame = adFrame; 

     [UIView commitAnimations]; 
     self.bannerIsVisible = NO; 
    } 
} 

問題是我想在設備方向更改時自動將iAD視圖設置到視圖的底部。我嘗試了很多東西,但沒有一個是正在工作的。

另外爲什麼我必須使用通知中心來檢查設備方向? DidRotateToInterfaceOrientation似乎不起作用。

+0

在iOS 6中有改變旋轉行爲,看到這裏例如http://stackoverflow.com/questions/12536645/rotation-behaving-differently-on-ios6。當界面旋轉時,再次設置adbanner框架。 – 2013-02-18 11:39:58

回答

3

我可以理解這一點錯,但如果你設置如下:

[adView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 

這應該意味着,隨着您的看法變大/小(當你旋轉)應該增加/減少「頂」保證金,因此應該堅持到底。

雖然我可能已經理解錯誤,但是..如果上述想法不起作用,您是否能夠提供當前正在發生的事情的屏幕截圖?

0

嘗試這在viewDidLoad方法:

CGRect adFrame = adView.frame; 
adFrame.origin.y = self.view.frame.size.height-adView.frame.size.height; 
adView.frame = adFrame; 

它將您的iAd設置爲視圖的底部,而不管裝置的類型。不要在代理方法中設置iAd的框架。

+1

我在bannerViewDidLoadAd中有。 – 2013-02-12 09:12:10

+0

編輯我的答案。請再檢查一次。 – 2013-02-12 09:21:29

+0

這似乎沒有任何不同。 – 2013-02-12 12:40:52

0

該解決方案適用於iOS 6

使用通知監聽在視圖控制器的viewDidLoad方法的設備方向的變化:

UIDevice *device = [UIDevice currentDevice]; 
[device beginGeneratingDeviceOrientationNotifications]; 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self selector:@selector(orientationChanged:)name:UIDeviceOrientationDidChangeNotification object:device]; 

UIInterfaceOrientation destOrientation = self.interfaceOrientation; 

然後在你的viewController監聽使用if語句的變化,當變化方向重新定位廣告橫幅查看:

if (destOrientation == UIInterfaceOrientationPortrait || destOrientation == UIInterfaceOrientationPortraitUpsideDown) { 

    ADBannerView *bannerView = (ADBannerView *)[self.view viewWithTag:615]; 
    CGRect myAdBanner = bnrAd.frame; 
    myAdBanner.origin.x = 0; 
    myAdBanner.origin.y = 410; 
    bannerView.frame = myAdBanner; 

} else { 

    ADBannerView *bannerView = (ADBannerView *)[self.view viewWithTag:615]; 
    CGRect myAdBanner = bnrAd.frame; 
    myAdBanner.origin.x = 0; 
    myAdBanner.origin.y = 265; 
    bannerView.frame = myAdBanner; 
} 

不要忘記調用方法來加載廣告到你的觀點:

- (void) bannerViewDidLoadAd:(ADBannerView *)banner { 
    bnrAd = _bannerView; 
} 

- (BOOL) bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave { 
    return YES; 
} 
0

看到下面的代碼,並且需要支持iOS 6以上,我用我的iPad應用程序的代碼:

在.h文件中

#import <iAd/iAd.h> 

@interface MyViewController : UIViewController <ADBannerViewDelegate> { 

    ADBannerView *bannerView; 

    BOOL bannerIsVisible; 

} 

在.m文件

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // detect device orientation change 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

    if (SYSTEM_VERSION_LESS_THAN(@"7.0")) { 

     [[NSNotificationCenter defaultCenter] 
     addObserver:self selector:@selector(orientationChanged:) 
     name:UIDeviceOrientationDidChangeNotification 
     object:[UIDevice currentDevice]]; 

    } 

    [self showiAds]; 

} 

- (void) showiAds{ 

    bannerView = [[ADBannerView alloc] initWithFrame:CGRectZero]; 

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 

     UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

     if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) { 

      [bannerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin]; 

     } else { 

      [bannerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 

     } 

    } 

    if (SYSTEM_VERSION_LESS_THAN(@"7.0")) { 

     [bannerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin]; 

    } 

    bannerView.delegate = self; 

    bannerView.hidden = YES; 

    [self.view addSubview:bannerView]; 

    bannerIsVisible = NO; 

} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    NSLog(@"bannerViewDidLoadAd"); 

    if (!bannerIsVisible) { 

     bannerView.hidden = NO; 

     [UIView beginAnimations:@"animateAdBannerOn" context:NULL]; 

     // banner is invisible now and moved out of the screen on 50 px 
     banner.frame = CGRectOffset(banner.frame, 0, self.view.frame.size.height - bannerView.frame.size.height); 

     [UIView commitAnimations]; 

     bannerIsVisible = YES; 

    } 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    NSLog(@"didFailToReceiveAdWithError : %@", [error localizedDescription]); 

    if (bannerIsVisible) { 

     [UIView beginAnimations:@"animateAdBannerOff" context:NULL]; 

     // Assumes the banner view is placed at the bottom of the screen. 
     banner.frame = CGRectOffset(banner.frame, 0, banner.frame.size.height); 

     [UIView commitAnimations]; 

     bannerIsVisible = NO; 

    } 

} 

希望你能理解上面的代碼。祝你好運

Cheerio, 馬克添