0

我刚刚使用 iAds 和 adMob 在我的应用程序中实现了 adWhirl。一切都正确编译,adMob 运行良好,但我的 iAd 尺寸不正确。广告看起来尺寸合适,但实际上似乎被截断了。大约 1/4 的广告似乎丢失了。因为我没有错误,所以我不知道在哪里可以解决这个问题。

这是我的广告栏的截图。

http://imgur.com/waPPD

任何帮助或只是朝着正确方向轻推将不胜感激!

这是 AdWhirlAdapteriAd.h

#import "AdWhirlAdNetworkAdapter.h"
#import <iAd/ADBannerView.h>

@interface AdWhirlAdapterIAd : AdWhirlAdNetworkAdapter <ADBannerViewDelegate> {
  NSString *kADBannerContentSizeIdentifierPortrait;
  NSString *kADBannerContentSizeIdentifierLandscape;
}

+ (AdWhirlAdNetworkType)networkType;

@end

这是 AdWhirlAdapteriAd.m

#import "AdWhirlAdapterIAd.h"
#import "AdWhirlAdNetworkConfig.h"
#import "AdWhirlView.h"
#import "AdWhirlLog.h"
#import "AdWhirlAdNetworkAdapter+Helpers.h"
#import "AdWhirlAdNetworkRegistry.h"

@implementation AdWhirlAdapterIAd

+ (AdWhirlAdNetworkType)networkType {
  return AdWhirlAdNetworkTypeIAd;
}

+ (void)load {
  if(NSClassFromString(@"ADBannerView") != nil) {
    [[AdWhirlAdNetworkRegistry sharedRegistry] registerClass:self];
  }
}

- (void)getAd {
  ADBannerView *iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero];
  kADBannerContentSizeIdentifierPortrait =
    &ADBannerContentSizeIdentifierPortrait != nil ?
      ADBannerContentSizeIdentifierPortrait :
      ADBannerContentSizeIdentifierPortrait;
  kADBannerContentSizeIdentifierLandscape =
    &ADBannerContentSizeIdentifierLandscape != nil ?
      ADBannerContentSizeIdentifierLandscape :
      ADBannerContentSizeIdentifierPortrait;
  iAdView.requiredContentSizeIdentifiers = [NSSet setWithObjects:
                                        kADBannerContentSizeIdentifierPortrait,
                                        kADBannerContentSizeIdentifierLandscape,
                                        nil];
  UIDeviceOrientation orientation;
  if ([self.adWhirlDelegate respondsToSelector:@selector(adWhirlCurrentOrientation)]) {
orientation = [self.adWhirlDelegate adWhirlCurrentOrientation];
  }
  else {
    orientation = [UIDevice currentDevice].orientation;
  }

  if (UIDeviceOrientationIsLandscape(orientation)) {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierLandscape;
  }
  else {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierPortrait;
  }
  [iAdView setDelegate:self];

  self.adNetworkView = iAdView;
  [iAdView release];
}

- (void)stopBeingDelegate {
  ADBannerView *iAdView = (ADBannerView *)self.adNetworkView;
  if (iAdView != nil) {
    iAdView.delegate = nil;
  }
}

- (void)rotateToOrientation:(UIInterfaceOrientation)orientation {
  ADBannerView *iAdView = (ADBannerView *)self.adNetworkView;
  if (iAdView == nil) return;
  if (UIInterfaceOrientationIsLandscape(orientation)) {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierLandscape;
  }
  else {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierPortrait;
  }
  // ADBanner positions itself in the center of the super view, which we do not
  // want, since we rely on publishers to resize the container view.
  // position back to 0,0
  CGRect newFrame = iAdView.frame;
  newFrame.origin.x = newFrame.origin.y = 0;
  iAdView.frame = newFrame;
}

- (BOOL)isBannerAnimationOK:(AWBannerAnimationType)animType {
  if (animType == AWBannerAnimationTypeFadeIn) {
    return NO;
  }
  return YES;
}

- (void)dealloc {
  [super dealloc];
}

#pragma mark IAdDelegate methods

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
  // ADBanner positions itself in the center of the super view, which we do not
  // want, since we rely on publishers to resize the container view.
  // position back to 0,0
  CGRect newFrame = banner.frame;
  newFrame.origin.x = newFrame.origin.y = 0;
  banner.frame = newFrame;

  [adWhirlView adapter:self didReceiveAdView:banner];
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
  [adWhirlView adapter:self didFailAd:error];
}

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:              (BOOL)willLeave {
  [self helperNotifyDelegateOfFullScreenModal];
  return YES;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner {
  [self helperNotifyDelegateOfFullScreenModalDismissal];
}

@end

这是在应用程序中调用广告的位置

主菜单界面.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "GameManager.h"
#import "AdWhirlView.h"
#import "AdWhirlDelegateProtocol.h"
#import "Reading_FluencyAppDelegate.h"
#import "RootViewController.h"

enum GameStatePP {
    kGameStatePlaying,
    kGameStatePaused
};


@interface MainMenuInterface : CCLayer <AdWhirlDelegate>

{
    CCMenu *mainMenu;
    CCMenu *aboutPage;

    RootViewController *viewController;
    AdWhirlView *adWhirlView;
    enum GameStatePP _state;
}

@property(nonatomic,retain) AdWhirlView *adWhirlView;
@property(nonatomic) enum GameStatePP state;

-(void)displayStartButton;

@end

这是 MainMenuInterface.m 中的重要内容

- (void)adWhirlWillPresentFullScreenModal {

    if (self.state == kGameStatePlaying) {

        //[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];

        [[CCDirector sharedDirector] pause];
  }
}

- (void)adWhirlDidDismissFullScreenModal {

    if (self.state == kGameStatePaused)
        return;

    else {
        self.state = kGameStatePlaying;
        //[[SimpleAudioEngine sharedEngine] resumeBackgroundMusic];
        [[CCDirector sharedDirector] resume];

    }
}

- (NSString *)adWhirlApplicationKey {
    return @"23myapplicationkey39203924";
}

- (UIViewController *)viewControllerForPresentingModalView {
    return viewController;
}

-(void)adjustAdSize {
    [UIView beginAnimations:@"AdResize" context:nil];
    [UIView setAnimationDuration:0.2];
    CGSize adSize = [adWhirlView actualAdSize];
    CGRect newFrame = adWhirlView.frame;
newFrame.size.height = adSize.height;

CGSize winSize = [CCDirector sharedDirector].winSize;
newFrame.size.width = winSize.width;
newFrame.origin.x = (self.adWhirlView.bounds.size.width - adSize.width)/2;

newFrame.origin.y = (winSize.height - adSize.height);
adWhirlView.frame = newFrame;
[UIView commitAnimations];
}

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
[adWhirlView rotateToOrientation:UIInterfaceOrientationLandscapeRight];
[self adjustAdSize];

}

-(void)onEnter {
    viewController = [(Reading_FluencyAppDelegate *)[[UIApplication sharedApplication]         delegate] viewController];
    self.adWhirlView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
    self.adWhirlView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;

    [adWhirlView updateAdWhirlConfig];
CGSize adSize = [adWhirlView actualAdSize];
CGSize winSize = [CCDirector sharedDirector].winSize;
self.adWhirlView.frame = CGRectMake((winSize.width/2)-(adSize.width/2),winSize.height-            adSize.height,winSize.width,adSize.height);
self.adWhirlView.clipsToBounds = YES;
[viewController.view addSubview:adWhirlView];
[viewController.view bringSubviewToFront:adWhirlView];
[super onEnter];
}

-(void)onExit {
if (adWhirlView) {
    [adWhirlView removeFromSuperview];
    [adWhirlView replaceBannerViewWith:nil];
    [adWhirlView ignoreNewAdRequests];
    [adWhirlView setDelegate:nil];
    self.adWhirlView = nil;
}
[super onExit];
}

-(void)dealloc
{
self.adWhirlView.delegate = nil;
self.adWhirlView = nil;
[super dealloc];
}
4

2 回答 2

1

也许您的winSize财产sharedDirector仍然认为您的肖像?如果你翻转它,你有:

newFrame.size.width = winSize.height;
newFrame.origin.x = (self.adWhirlView.bounds.size.width - adSize.width)/2;

newFrame.origin.y = (winSize.width - adSize.height);
adWhirlView.frame = newFrame;
于 2012-07-31T16:06:02.317 回答
0

对于那些将来需要知道的人,我的问题原来是它调用的是横向广告而不是纵向广告,而不是调用 adjustAdSize() 时它没有得到正确的尺寸。

我变了

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
    [adWhirlView rotateToOrientation:UIInterfaceOrientationLandscapeRight];
    [self adjustAdSize];
{

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
    [adWhirlView rotateToOrientation:UIInterfaceOrientationPortrait];
    [self adjustAdSize];
{

它解决了我所有的问题!

于 2012-07-31T22:31:36.577 回答