1

アプリに AdMob バナーを表示したい UIViewcontrollers では動作するようになりましたが、UIView では動作しませんでした... バナーは表示されますが、クリックしても何も起こりません! UIViewcontrollers のバナーをクリックすると動作します!

UIViewcontrollers のコード (動作します!)

 - (void)viewDidLoad
 {

[super viewDidLoad];
bannerView_ = [[GADBannerView alloc] initWithFrame:CGRectMake(0.0, self.view.frame.size.height - GAD_SIZE_320x50.height-49, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height)];

bannerView_.adUnitID = MY_BANNER_UNIT_ID;
bannerView_.rootViewController = self;
[self.view addSubview:bannerView_];


GADRequest *r = [[GADRequest alloc] init];
r.testing = YES;
[bannerView_ loadRequest:r];
// Do any additional setup after loading the view, typically from a nib.

}

UiView のコード: (動作しません)

 - (void)drawRect:(CGRect)rect
  {




  // Create a view of the standard size at the bottom of the screen.
  bannerView_ = [[GADBannerView alloc] initWithFrame:CGRectMake(0.0, self.frame.size.height - GAD_SIZE_320x50.height, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height)];
  // Specify the ad's "unit identifier." This is your AdMob Publisher ID.
  bannerView_.adUnitID = MY_BANNER_UNIT_ID;

  // Let the runtime know which UIViewController to restore after taking
  // the user wherever the ad goes and add it to the view hierarchy.
  bannerView_.rootViewController = self;
 [self addSubview:bannerView_];

  // Initiate a generic request to load it with an ad.
  [bannerView_ loadRequest:[GADRequest request]];
  // Drawing code
  }

行 bannerView_.rootViewController = self; 警告が表示されますが、それなしでは機能しません! 警告には、「互換性のないポインター タイプが 'UIViezController *' from 'blandad *const_strong' に割り当てられています。

UIView の .m および .h ファイルの名前に当たり障りのないものです。

何が間違っていると思いますか?

/初心者

4

4 に答える 4

2

メソッドからすべてのコードを削除してください- (void)drawRect:(CGRect)rect。グラフィック コンテキストで何かを描画する場合は、このメソッドをオーバーライドする必要があります。このメソッドは一度ではなく何度も呼び出されるため、毎回新しいビューを割り当ててサブビューとして追加します

広告バナーをカスタム UIView に追加する場合は、次のようにします。

// in your CustomView implementation
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        bannerView_ = [[GADBannerView alloc] initWithFrame:CGRectMake(0.0, self.view.frame.size.height - GAD_SIZE_320x50.height-49, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height)];

        bannerView_.adUnitID = MY_BANNER_UNIT_ID;

        UIViewController* root = [(YOUR_APP_DELEGATE_CLASS*)[[UIApplication sharedApplication] delegate] viewController];
        bannerView_.rootViewController = root;
        [self addSubview:bannerView_];


        GADRequest *r = [[GADRequest alloc] init];
        r.testing = YES;
        [bannerView_ loadRequest:r];

    }
    return self;
}

あなたがUIViewController* root持っている任意のコントローラーで設定できます。ビューがカスタムビューの親であるコントローラーをそこに設定することをお勧めします。viewControllerアプリ デリゲートからルート ビュー コントローラーのパスを書きました。使用する場合は、アプリ デリゲートにこのプロパティがあることを確認してください。

于 2012-10-25T16:05:51.157 に答える
0

あなたが問題を解決したかどうかはわかりませんが、私の側からは同じ問題が発生しました。

UIView から継承した適切なビューに GAD バナー ビューを追加すると、バナーは適切に表示されましたが、Admob リンクはアクティブではありませんでした。

私の場合、GAD バナー ビューは GADBannerView の adViewDidReceiveAd デリゲートに追加されました。どうやらそれは良い方法ではありません。

初期化した直後に GAD バナー ビューを追加することで、すべてが正常に機能するようになりました。

- (void)initGADBannerViewWithId:(NSString *)bannerId andRootController:(UIViewController *)rootController
{
    _gadBannerView = [[GADBannerView alloc] initWithFrame:self.frame];

    _gadBannerView.adUnitID = bannerId;

    // Let the runtime know which UIViewController to restore after taking
    // the user wherever the ad goes and add it to the view hierarchy.
    _gadBannerView.rootViewController = rootController;
    _gadBannerView.delegate = self;
    [self addSubview:_gadBannerView];
}

そして、GADBannerView の adViewDidReceiveAd デリゲートでは、動的な視覚効果を持つようにバナーの位置を変更するアニメーションを作成するだけです。

これが誰かを助けることを願っています

于 2013-10-15T09:00:00.333 に答える
0

私の意見では、1 つのバナー広告を管理し、広告が必要なすべてのビューにそれを追加するのが最善の方法です。

私が書いたこのクラスを試してください - https://github.com/jackwu95/JWGADManager

于 2014-01-13T19:59:45.943 に答える