1

奇妙な問題があります。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 のデリゲートを介して呼び出されます。バナーの表示では、ボタンが初期化されます。ボタンが初期化されていない場合にのみ、コードが機能します (広告が表示されます)。

特に、ボタンがサブビューに追加されるまで、すべてが正常に機能します。

4

1 に答える 1

0

問題は、同じフレームを使用してボタンとバナーを表示していることです。その結果、ボタンが完全に覆われています。_frame.size.height内部機能を減らすshowBannerと、バナーが表示されます。

于 2013-07-13T05:56:42.230 に答える