6

それぞれに iAd を表示する必要がある 5 つの ViewController があるため、各 ViewController に iAd コードを実装する必要があります。その代わりに、AppDelegate で一連の共通コードを作成すると、iAd を表示する必要がある場所ならどこでもそのコードを呼び出すことができます。

誰かがこの iAd の概念を実装した場合、この問題から抜け出すのを手伝ってください。前もって感謝します。

4

3 に答える 3

5

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];
}

レイアウトを再設計するための適切なコードを使用して、すべてのビュー コントローラーに対してこれを行います。

于 2012-05-18T20:17:15.383 に答える
1

こんにちはこれは良い答えのように見えますが、mファイルにAppDelegateをインポートする必要はありません

#import "AppDelegate.h" 

ネットワーク接続がない場合や追加が表示されていない場合は、追加を非表示にしないでください

于 2012-08-07T07:07:33.443 に答える
0

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 の例のデリゲート関数をビュー コントローラーに追加することを忘れないでください。

于 2013-01-09T04:36:17.160 に答える