如何阻止iAds在xcode中扭曲SKScene?

时间:2014-07-23 09:17:39

标签: ios objective-c xcode ios7 iad

所以我已经将iAd添加到我的应用程序中,并且我已经非常简单地完成了这项工作。通过将iAds导入ViewController.h并将以下代码放入ViewController.m文件中:

self.canDisplayBannerAds = YES;

然而,当我添加加载时,屏幕会被挤压。所有图像和精灵都变短了。

有没有什么方法可以将添加物覆盖在SKScene之上?所以这不会影响下面的元素 - 所以它会停止压扁?

此外,是否有办法只在某些SKScenes中运行横幅广告,或者当BOOL从YES更改为NO?

已更新

我项目的代码:

#import "XYZViewController.h"
#import "XYZMenuScene.h"
#import <iAd/iAd.h>

@implementation XYZViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [XYZMenuScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    //iAds Enabled
    self.canDisplayBannerAds = YES;

    // Present the scene.
    [skView presentScene:scene];
}

这就是我在iAds方面的全部内容。它使整个场景向上推,为广告横幅腾出空间。我希望它只是在现场,而不是推动任何东西。所以它涵盖了,而不是推动。

2 个答案:

答案 0 :(得分:1)

要进行叠加,您可以将横幅的Z位置设置为高于内容的其余部分,默认情况下为0。

例如:

    banner.layer.zPosition=2;

但是我相信iAd框架内置了一些方法,您可以覆盖该方法来控制广告何时必须显示以及何时不应该显示,并为您提供更多控制权。 广告可用时会调用特定方法,就像您说的那样,只有当布尔值为1或0时才会显示广告。

例如:

  - (void)bannerViewDidLoadAd:(ADBannerView *)banner
   {

  if(showADS==1)
  {
if (!self.bannerIsVisible)
{  
    [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
 // Assumes the banner view is just off the bottom of the screen.
    banner.frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height);
    [UIView commitAnimations];
    self.bannerIsVisible = YES;
}
}
 else
  {NSlog(@"No ads");}

}

查看苹果公司关于此的文档,他们真的很有帮助 https://developer.apple.com/library/ios/documentation/userexperience/Conceptual/iAd_Guide/WorkingwithBannerViews/WorkingwithBannerViews.html

但是,让我们举一个完整的例子。 横幅实例仅适用于您之外的iAd方法。 在您的视图中执行了加载方法:

    - (void)viewDidLoad

    { 

     self.canDisplayBannerAds=YES;

     }    

加载广告时调用此方法,此方法指定广告的位置

    - (void)bannerViewDidLoadAd:(ADBannerView *)banner
      {
         banner.layer.zPosition=2;
        /*do all the additional like checking is the boolean is 1 or 0 etc.*/ 

      }

如果您正在使用iAd和sprite工具包,则需要从场景类中调用视图控制器中的方法来执行所有广告工作。

假设您在视图控制器中有一个名为 checkAD 的方法,用于检查广告是否应该显示等。

您可以使用此代码

从场景类中调用此方法
if([self.delegate respondsToSelector:@selector(checkAD)]){

    [self.delegate checkAD];
}

答案 1 :(得分:0)

在容器视图中添加SKSCene可能有所帮助。根据我的经验,当通过canDisplayBannerAds添加iAd时,UIViewController的任何Apple子类都可以做奇怪的事情。