1

アプリにADBannerviewを追加しました。UIApplicationDelegateでAdBannerViewを作成して、そのインスタンスを1つだけにし、別のviewControllerで共有します。

警告メッセージが表示されることを除いて、すべてが完全に機能します。ADBannerView:警告バナービュー(0x9c75550)には広告がありますが、不明瞭になっている可能性があります。このメッセージは、バナービューごとに1回だけ印刷されます。

現在ADBannerviewを表示しているビューの上に(presentModalViewControllerを使用して)モーダルビューを開いたとき。モーダルビューを開く前に、次のコードを使用してADBannerviewを非表示にしています。

- (void)viewWillDisappear:(BOOL)animated
{
    ADBannerView *bannerView = [ (ScoreBoardAppDelegate*)[[UIApplication sharedApplication] delegate] adBanner];
    [self hideBanner:bannerView];
    [super viewWillDisappear:animated];
}

- (void)hideBanner:(ADBannerView*) adBanner {
    NSLog(@"%s called", __FUNCTION__);

    // Grow the tableview to occupy space left by banner, it's the size of the parent view
    CGFloat fullViewHeight = self.tbView.frame.size.height;
    CGRect tableFrame = self.tv.frame;
    tableFrame.size.height = fullViewHeight;

    // Move the banner view offscreen
    CGRect bannerFrame = adBanner.frame;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    bannerFrame.origin = CGPointMake(CGRectGetMinX(screenBounds), CGRectGetMaxY(screenBounds));

    self.tv.frame = tableFrame;
    adBanner.frame = bannerFrame;
}

この警告メッセージが表示されないようにするにはどうすればよいかわかりません。モーダルビューが表示される前に、ADBannerViewが正常に非表示(オフスクリーン)になっているようです。

何か見落としたのかもしれませんが、見えません。ご協力いただきありがとうございます、

セバスチャン。

4

1 に答える 1

1

セバスチャン、質問が何ヶ月も答えられなかったので、あなたがこれから進んだことを願っています。最近iAdサポートを追加しましたが、この警告も非常に煩わしいことがわかりました。広告バナーを共有する際の微妙な点の1つは、最初のView Controllerで表示する場合、アプリデリゲートではなく、そのViewControllerでほとんどの設定を行う必要があることです。

これは、私の最初のView ControllerのviewWillAppear:メソッドです。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (!SharedAdBannerView) {
        // in my app, the ad banner is the bottom-most thing on screen
        CGRect startingFrame = CGRectMake(0.0, self.view.frame.origin.y + self.view.frame.size.height, 320.0, 50.0);
        adBanner = [[ADBannerView alloc] initWithFrame:startingFrame];

        // Set the autoresizing mask so that the banner is pinned to the bottom
        adBanner.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;

        // Since we support all orientations, support portrait and landscape content sizes.
        // If you only supported landscape or portrait, you could remove the other from this set
        adBanner.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, nil];
        adBanner.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;

        adBanner.delegate = self;
        [self.view addSubview:adBanner];
        SharedAdBannerView = adBanner; 
    } else {
        adBanner = SharedAdBannerView;
}

SharedAdBannerViewは、TN2286で定義されているマクロであり、アプリデリゲートで定義されているインスタンス変数を利用しています(これにより、iAdを表示するすべてのビュー間で共有されたままになります)。また、あるシーンが別のシーンにセグエしているため、ビュー階層から広告バナーを削除する前に、画面から広告バナーをアニメーション化することにしました。ドキュメントを読んだところ、広告バナーがビュー階層の一部である場合は常にそのメッセージが表示されます。つまり、バナービューを非表示にしても、警告メッセージを防ぐことはできません。言い換えれば、広告バナーを非表示にするだけで十分な場合、それは私にとっては機能せず、トラブルシューティングにも役立ちませんでした。gdbでこのヒントを提供しているTN2239に出くわしたとき、私は多くのことを学びました。

 po [[self view] recursiveDescription];

ブレークポイントを配置した場所に基づいて、recursiveDescriptionメッセージの送信先のオブジェクトを調整する必要がありますが、おそらく[セルフビュー]で問題ありません。

于 2012-01-14T06:49:09.713 に答える