gpt4 book ai didi

xcode - 使用 UITableViews 跨应用程序使用 ADBannerView 的共享实例

转载 作者:行者123 更新时间:2023-12-05 00:34:38 26 4
gpt4 key购买 nike

我有一个包含多个 UITableViews 的应用程序,并且正在实现 iADs。根据 Apple 文档 (http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212),我创建了一个属于我的应用程序代表的共享横幅,并且应用程序代表也是横幅的代表。这很有效,并且在加载横幅和用户切换屏幕后,广告在各种 View Controller 中很好地显示。

问题是在出现的第一个 viewController 上没有看到广告,因为 View Controller 的 viweWillAppear 方法(我在其中调用我的“fixUpAdView”方法)在加载横幅之前出现。

我想我没有得到的部分是这个(来自苹果文档):
“让您的应用程序委托(delegate)告诉当前 View Controller 是否应该显示或隐藏横幅。您可以使用 UINavigationControllerDelegate 或 UITabBarControllerDelegate 协议(protocol)来推送横幅以显示它。”我知道我需要在我的bannerViewDidLoadAd 和failToReceive 方法中添加一些内容,但是对于如何执行此操作有点困惑。

我不希望广告显示在我的所有 View Controller (只有 6 个)上,并且我在应用程序中也有几个模态视图(其中任何一个都没有广告)。

这是我的一些代码:
在我的 appDelegate 中:

- (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], 0,
-(iAD_BANNER_HEIGHT))];
[_sharedAdBannerView setDelegate:self];
}
}

return _sharedAdBannerView;
}

在我的 View Controller 中:
- (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 来解决这个问题就像一个魅力,现在我的 iAd 一加载就会出现 - 耶!如果其他人需要这里是我输入的额外代码:
(在我的 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];

关于xcode - 使用 UITableViews 跨应用程序使用 ADBannerView 的共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com