gpt4 book ai didi

iphone - iAd——无法点击横幅

转载 作者:行者123 更新时间:2023-12-03 18:43:10 25 4
gpt4 key购买 nike

我正在创建一个通用应用程序模板。

此模板需要支持可选的 iAd,以及所有方向(可选)。

我编写了一个解决方案,却发现了一个奇怪的错误。在某些情况下我无法点击横幅

然后,我重新编码了另一个版本,整理了所有内容,并删除了大部分代码以揭示最小的测试用例失败。

https://github.com/p-i-/iAdUniversalTemplate/commit/2c829d268a9452e1a054802e7ccb9cde5de17853

在这段新代码中,只有 3 个 View :窗口、uberview( View Controller 的 View )和广告横幅

因此,横幅在提供后会正确显示,自动旋转工作正常......我已经记录了每个的框架和边界,一切都如其应有。

但是它没有响应点击(好吧,点击因为我在模拟器中)

可能出了什么问题?我开始怀疑,在将 XIB 从项目中删除并从代码中实现窗口和 View Controller 时,我遗漏了某些内容或将某些内容从后到前连接起来。

有趣的代码块:

AppDelegate.m

- (BOOL) application: (UIApplication *) application 
didFinishLaunchingWithOptions: (NSDictionary *) launchOptions
{
NSLog(@"--> ___PROJECTNAME___AppDelegate:didFinishLaunchingWithOptions...");

// FIXED: now entry in info.plist hides SB BEFORE launch
[[UIApplication sharedApplication] setStatusBarHidden: (SHOW_SB ? NO : YES)];

CGRect appFrame = [UIScreen mainScreen].applicationFrame;

// windowRect must start at 0, 0
// if (SHOW_SB == YES), appFrame will be '{{0, 20}, {320, 460}}'
CGRect windowRect = CGRectMake(0, 0, appFrame.size.width, appFrame.size.height);

self.window = [[[UIWindow alloc] initWithFrame: windowRect] autorelease];

self.viewController = [ [ [ ___PROJECTNAME___ViewController alloc ] init ] autorelease ];

[self.window setRootViewController: viewController];

// triggers loadView
[self.window makeKeyAndVisible];

return YES;
}

iAdVC.m

- (void) loadView 
{
self.uberView = [[[UIView alloc] initWithFrame: [UIScreen mainScreen].applicationFrame] autorelease];
self.uberView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.uberView.autoresizesSubviews = YES;
self.uberView.clipsToBounds = YES;

//UIWindow * w = self.view.window;
//w.clipsToBounds = YES;

[self setView: uberView];

showingBanner = NO;
adBannerView = nil;
if (IADS_ENABLED)
{
NSString * P = ADBannerContentSizeIdentifierPortrait;
NSString * L = ADBannerContentSizeIdentifierLandscape;

self.adBannerView = [[[ADBannerView alloc] initWithFrame:CGRectZero] autorelease];

self.adBannerView.delegate = self;
self.adBannerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
self.adBannerView.requiredContentSizeIdentifiers = [NSSet setWithObjects: P, L, nil];
self.adBannerView.currentContentSizeIdentifier = UIInterfaceOrientationIsPortrait( self.interfaceOrientation ) ? P : L ;

[uberView addSubview: adBannerView];
}

UIWindow * w = [[UIApplication sharedApplication] keyWindow];

w.userInteractionEnabled = YES;
self.uberView.userInteractionEnabled = YES;
self.adBannerView.userInteractionEnabled = YES;

w.clipsToBounds = YES;
self.uberView.clipsToBounds = YES;
self.adBannerView.clipsToBounds = YES;

w.opaque = YES;
self.uberView.opaque = YES;
self.adBannerView.opaque = YES;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - -

#pragma mark Autorotate

- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
return YES;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - -

- (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) newOrientation
duration: (NSTimeInterval) duration
{
bool isLandscape = UIInterfaceOrientationIsLandscape(newOrientation);
self.adBannerView.currentContentSizeIdentifier = isLandscape ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifierPortrait ;
}


#pragma mark Banner

// - - - - - - - - - - - - - - - - - - - - - - - - - -

- (void) bannerViewDidLoadAd: (ADBannerView *) banner
{
if (! showingBanner)
{
showingBanner = YES;
// ... (optionally animate in)
}
}


// - - - - - - - - - - - - - - - - - - - - - - - - - -

- (void) bannerView: (ADBannerView *) banner
didFailToReceiveAdWithError: (NSError *) error
{
NSLog(@"FAIL");

if (showingBanner)
{
showingBanner = NO;
// ... (optionally animate out)
}
}

// - - - - - - - - - - - - - - - - - - - - - - - - - -

-(BOOL) bannerViewActionShouldBegin: (ADBannerView *) banner
willLeaveApplication: (BOOL) willLeave
{
return YES; // doesnt get hit
}

// = = = = = = = = = = = = = = = = = = = = = = = = = =

最佳答案

这是一个令人讨厌的 bug

我最终不得不使用我的 2 个 ITS 帮助热线事件中的一个,并因此损失了一整周的工作时间。

将uberView的backgroundColor属性设置为ANYTHING非nil可以解决这个问题。

这是 XIB magic 完成的事情之一

有一个名为 nib2objc 的工具,可以将 XIB 转换为代码。如果我必须自己调试它,以实际查看 Apple 默认 XIB 中包含的内容,并查看我无法手动实现的内容,那么这将是下一步。

但这是 UIKit 中的一个 BUG。 Apple 的 ITS 代表告诉我要这样做,我已经这样做了。

关于iphone - iAd——无法点击横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5475404/

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