奇妙な問題があります。iAd が機能します。UIButton を (" [self initCloseAdButtonWithFrame:_frame];
" を使用して) 初期化するとすぐに、iAds は動作を停止しますが、ボタンは正しい場所で初期化されます。このコードは、広告の可用性に応じて、広告バナーをスライドさせたりスライドさせたりします。
closeButton の初期化によって広告機能が損なわれるのはなぜですか?
ViewController.m
#pragma mark - Ads
-(void)initiAdBanner
{
DLog(@"");
if (!self.iAdBannerView)
{
CGRect rect = CGRectMake(0, self.view.frame.size.height, 0, 0);
self.iAdBannerView = [[ADBannerView alloc]initWithFrame:rect];
self.iAdBannerView.delegate = self;
self.iAdBannerView.hidden = TRUE;
[self.view addSubview:self.iAdBannerView];
}
}
#pragma mark - ADBanner delegate methods -
// Called before the add is shown, time to move the view
- (void)bannerViewWillLoadAd:(ADBannerView *)banner
{
DLog(@"iAd load");
[self hideBanner:self.gAdBannerView];
[self showBanner:self.iAdBannerView];
}
// Called when an error occured
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
DLog(@"iAd error: %@", error);
[self hideBanner:self.iAdBannerView];
GADRequest *request = [GADRequest request];
request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];
[self.gAdBannerView loadRequest:request];
}
#pragma mark - Banner hide and show -
// Hide the banner by sliding down
-(void)hideBanner:(UIView*)banner
{
if (banner && ![banner isHidden])
{
[UIView beginAnimations:@"hideBanner" context:nil];
banner.frame = CGRectOffset(banner.frame, 0, banner.frame.size.height);
[UIView commitAnimations];
banner.hidden = TRUE;
if(closeButton){
[closeButton setHidden:TRUE];
}
}
}
// Show the banner by sliding up
-(void)showBanner:(UIView*)banner
{
if (banner && [banner isHidden])
{
CGRect _frame2 = CGRectOffset(banner.frame, 0, -banner.frame.size.height);
CGRect _frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height);
[self initCloseAdButtonWithFrame:_frame];
[UIView beginAnimations:@"showBanner" context:nil];
banner.frame = _frame2;
[UIView commitAnimations];
banner.hidden = FALSE;
}
}
//button initialize
-(void)initCloseAdButtonWithFrame:(CGRect)frame{
DLog(@"");
closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[closeButton addTarget:self
action:@selector(inAppPurchase)
forControlEvents:UIControlEventTouchUpInside];
UIImage *_closeImage = [UIImage imageNamed:@"closeButton.png"];
UIImage *closeImage = [UIImage imageWithCGImage:_closeImage.CGImage scale:_closeImage.scale orientation:UIImageOrientationDown];
[closeButton setBackgroundImage:closeImage forState:UIControlStateNormal];
[closeButton setBackgroundImage:closeImage forState:UIControlStateHighlighted];
closeButton.frame = CGRectMake(frame.size.width - closeImage.size.width, -5 + self.view.frame.size.height -frame.size.height - closeImage.size.height, closeImage.size.width, closeImage.size.height);
[self.view insertSubview:closeButton atIndex:2];
[closeButton setHidden:FALSE];
}
-(void)inAppPurchase{
DLog(@"");
}
ShowBanner は、iAd のデリゲートを介して呼び出されます。バナーの表示では、ボタンが初期化されます。ボタンが初期化されていない場合にのみ、コードが機能します (広告が表示されます)。
特に、ボタンがサブビューに追加されるまで、すべてが正常に機能します。