1

背景: 先週、複数のviewControllerでadWhirlを使用することについて質問しましたが、残念ながらまだ取得できていません。

adWhirlDidReceiveAd:, adWhirlDidFailToReceiveAd:提案を受け取り、各viewControllerでアプリデリゲートで作成された1つのadWhirlインスタンスを使用しますが、アプリデリゲートが認識していないため、viewController(など)でadWhirlデリゲートイベントに応答する方法がわかりません。どのviewControllerが現在そのadViewを表示しているか。

したがって、私の混乱...

このためのデザインパターンはありますか?あるに違いないと思います。回避できるのであれば、すべてのviewControllerに定型のadWhirlデリゲートコードを使用したくありません。

各viewControllerで今得ているものは以下のとおりです。各ViewControllerが、アプリデリゲートのadViewの所有権を取得している「register」に呼び出すことができるメソッドをアプリデリゲートに設定してみました。デリゲートがのようなイベントを受信するとadWhirlDidReceiveAd、以下の作業を実行できると考えました。この種のことはうまくいきましたが、私は車輪の再発明をしていると思いました。

質問:複数のviewController間でadWhirlビューを使用するためのデザインパターンはありますか?

- (void)viewDidLoad
{
[super viewDidLoad];

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

[self.view addSubview:appDelegate.adView];
[self.view bringSubviewToFront:appDelegate.adView];

CGSize adSize = [appDelegate.adView actualAdSize];
CGRect onScreenFrame = appDelegate.adView.frame;
onScreenFrame.size.height = adSize.height; // fit the ad 
onScreenFrame.size.width = adSize.width; 
onScreenFrame.origin.x = (self.view.frame.size.width - adSize.width)/2; // center 
onScreenFrame.origin.y = (self.view.frame.size.height - adSize.height); 

appDelegate.adView.frame = onScreenFrame;

}


- (void)viewDidDisappear:(BOOL)animated
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.adView removeFromSuperview];
}
4

1 に答える 1

1

明白な答えは、すべてのViewControllerがサブクラスになるControllerクラスを作成することです。それで

AdviewDelegateController : UIViewController

YourViewController : AdviewDelegateController

次に、すべてのadviewロジックをAdviewDelegateControllerに配置します。

于 2012-05-23T13:53:04.377 に答える