それぞれに iAd を表示する必要がある 5 つの ViewController があるため、各 ViewController に iAd コードを実装する必要があります。その代わりに、AppDelegate で一連の共通コードを作成すると、iAd を表示する必要がある場所ならどこでもそのコードを呼び出すことができます。
誰かがこの iAd の概念を実装した場合、この問題から抜け出すのを手伝ってください。前もって感謝します。
それぞれに iAd を表示する必要がある 5 つの ViewController があるため、各 ViewController に iAd コードを実装する必要があります。その代わりに、AppDelegate で一連の共通コードを作成すると、iAd を表示する必要がある場所ならどこでもそのコードを呼び出すことができます。
誰かがこの iAd の概念を実装した場合、この問題から抜け出すのを手伝ってください。前もって感謝します。
APPデリゲートでiADへのポインタを作成するだけです。
.h:
@property (strong, nonatomic) ADBannerView *UIiAD;
.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UIiAD = [[ADBannerView alloc] init];
return YES;
}
次に、ViewControllers で次のようにします。
.h:
@property (strong, nonatomic) ADBannerView *UIiAD;
.m:
- (AppDelegate *) appdelegate {
return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}
- (void) viewWillAppear:(BOOL)animated {
UIiAD = [[self appdelegate] UIiAD];
UIiAD.delegate=self;
// CODE to correct the layout
}
- (void) viewWillDisappear:(BOOL)animated{
UIiAD.delegate=nil;
UIiAD=nil;
[UIiAD removeFromSuperview];
}
レイアウトを再設計するための適切なコードを使用して、すべてのビュー コントローラーに対してこれを行います。
こんにちはこれは良い答えのように見えますが、mファイルにAppDelegateをインポートする必要はありません
#import "AppDelegate.h"
ネットワーク接続がない場合や追加が表示されていない場合は、追加を非表示にしないでください
AppDelegate.h で:
#import <iAd/iAd.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
ADBannerView *_bannerView;
...
...
}
@property (nonatomic, retain) ADBannerView *_bannerView;
AppDelegate.m で:
@synthesize _bannerView;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)]) {
self._bannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
} else {
self._bannerView = [[ADBannerView alloc] init];
}
...
}
iAd を追加する必要があるビュー コントローラーで、「vwAd」という名前のコンテナー UIView を作成し、iAd を表示する xib ファイルで接続を行います。
@interface ViewController : UIViewController<ADBannerViewDelegate>
{
IBOutlet UIView *vwAd;
...
...
}
- (void)layoutAnimated:(BOOL)animated
{
CGRect contentFrame = self.view.bounds;
if (contentFrame.size.width < contentFrame.size.height) {
self.appDelegate._bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
} else {
self.appDelegate._bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;
}
CGRect bannerFrame = self.appDelegate._bannerView.frame;
if (self.appDelegate._bannerView.bannerLoaded) {
bannerFrame.origin.y = 0;
} else {
bannerFrame.origin.y = vwAd.frame.size.height;
}
[UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{
self.appDelegate._bannerView.frame = bannerFrame;
}];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
...
[self.appDelegate._bannerView removeFromSuperview];
self.appDelegate._bannerView.delegate = nil;
self.appDelegate._bannerView.delegate = self;
[vwAd addSubview:self.appDelegate._bannerView];
[self layoutAnimated:NO];
}
Apple の iAdSuite の例も参照してください。オリジナルの layoutAnimated 関数は、iAdSuite の例で見つけることができます。iAdSuite の例のデリゲート関数をビュー コントローラーに追加することを忘れないでください。