Я создаю шаблон универсального приложения.
Этот шаблон должен поддерживать дополнительные iAds и, при необходимости, все ориентации.
Я кодировал решение только для того, чтобы найти причудливую ошибку. в определенных ситуациях мне не удавалось нажать на баннер
Затем я перекодировал еще одну ревизию, все привел в порядок и выполнил большую часть кода, чтобы выявить минимальный сбой тестового примера.
https://github.com/p-i-/iAdUniversalTemplate/commit/2c829d268a9452e1a054802e7ccb9cde5de17853
В этом новом коде только 3 вида: окно, uberview (вид контроллера представления) и рекламный баннер
Итак, баннер отображается правильно, как только его обслужили, автоповорот работает нормально ...
Я записал рамки и границы для каждого, и все так, как и должно быть.
Но он не отвечает на нажатие (ну, нажмите, потому что я в симуляторе)
Что может быть не так? Я начинаю подозревать, что, вырезая XIB из проекта и реализуя контроллер окна и представления из кода, я что-то упустил или что-то подключил обратно вперед.
Сочные куски кода:
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
}
// = = = = = = = = = = = = = = = = = = = = = = = = = =