xcode – 使用UITableViews在app上使用ADBannerView的共享实例
发布时间:2020-12-14 17:49:50 所属栏目:百科 来源:网络整理
导读:我有一个带有多个UITableViews的应用程序,我正在实现iADs.根据Apple文档( http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212),我创建了一个属于我的应用程序委托的共享横幅,应用程序委托也是横幅的委
我有一个带有多个UITableViews的应用程序,我正在实现iADs.根据Apple文档(
http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212),我创建了一个属于我的应用程序委托的共享横幅,应用程序委托也是横幅的委托.这种方法效果很好,广告在加载横幅和用户切换屏幕后很好地显示在各种视图控制器上.
问题是在第一个viewController上没有看到广告,因为视图控制器的viweWillAppear方法(我称之为“fixUpAdView”方法)在加载横幅之前出现. 我想我得到的部分是这个(来自苹果文档): 我不希望广告在我的所有视图控制器上显示(只有6个),并且我在应用程序中也有几个模态视图(其中任何一个都没有广告). 这是我的一些代码: - (void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"bannerViewDidLoadAD"); if (!_adBannerViewIsVisible) _adBannerViewIsVisible = YES; } - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { NSLog(@"BannerAd didfailtoreceive"); if (_adBannerViewIsVisible) _adBannerViewIsVisible = NO; } - (ADBannerView *)sharedAdBannerView { if (_sharedAdBannerView == nil) { Class classAdBannerView = NSClassFromString(@"ADBannerView"); if (classAdBannerView != nil) { _sharedAdBannerView = [[classAdBannerView alloc] initWithFrame:CGRectZero]; [_sharedAdBannerView setRequiredContentSizeIdentifiers:[NSSet setWithObjects: ADBannerContentSizeIdentifier320x50,ADBannerContentSizeIdentifier480x32,nil]]; [_sharedAdBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50]; [_sharedAdBannerView setFrame:CGRectOffset([_sharedAdBannerView frame],-(iAD_BANNER_HEIGHT))]; [_sharedAdBannerView setDelegate:self]; } } return _sharedAdBannerView; } 在我的视图控制器中: - (void)viewWillAppear:(BOOL)animated { if ([[AppDelegate ad] shouldShowAds]) { if (!self.contentView) { self.contentView = [[UIView alloc] initWithFrame:[[self view] bounds]]; [self.view addSubview:_contentView]; } [self.contentView addSubview:topView]; [self fixupAdView]; [self.view addSubview:[[AppDelegate ad] sharedAdBannerView]]; } [super viewWillAppear:NO]; } #pragma mark #pragma mark iADS - (void)fixupAdView { if ([[AppDelegate ad] sharedAdBannerView] != nil) { [[[AppDelegate ad] sharedAdBannerView] setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50]; [UIView beginAnimations:@"fixupViews" context:nil]; if ([[AppDelegate ad] adBannerViewIsVisible]) { CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame]; adBannerViewFrame.origin.x = 0; adBannerViewFrame.origin.y = 0; [[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame]; CGRect contentViewFrame = _contentView.frame; contentViewFrame.origin.y = iAD_BANNER_HEIGHT; contentViewFrame.size.height = self.view.frame.size.height - iAD_BANNER_HEIGHT; _contentView.frame = contentViewFrame; } else { CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame]; adBannerViewFrame.origin.x = 0; adBannerViewFrame.origin.y = -(iAD_BANNER_HEIGHT); [[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame]; CGRect contentViewFrame = _contentView.frame; contentViewFrame.origin.y = 0; contentViewFrame.size.height = self.view.frame.size.height; _contentView.frame = contentViewFrame; } [UIView commitAnimations]; } } 解决方法
使用NSNotificationCenter来解决这个问题就像一个魅力,现在我的iAds一旦加载就会出现 – 耶!如果其他人需要这个是我输入的额外代码:
(在我的appDelegate.m中) - (void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"bannerViewDidLoadAD"); if (!_adBannerViewIsVisible) { _adBannerViewIsVisible = YES; [[NSNotificationCenter defaultCenter] postNotificationName:@"adjustAdBannerView" object:nil]; } } - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { NSLog(@"BannerAd didfailtoreceive"); if (_adBannerViewIsVisible) { _adBannerViewIsVisible = NO; [[NSNotificationCenter defaultCenter] postNotificationName:@"adjustAdBannerView" object:nil]; } } 在我的View Controller中(在viewWillAppear中): [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fixupAdView) name:@"adjustAdBannerView" object:nil]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |