在Sprite Kit场景中隐藏iAd

3
我可以帮您翻译成中文。这段内容是关于在Sprite Kit游戏中添加iAds的代码:
在viewController.h文件中,我已经添加了以下代码:
@property (strong, nonatomic) IBOutlet ADBannerView * adBannerView;

在viewController.m文件中。
- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    if (!skView.scene) {

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

        _adBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
        _adBannerView.delegate = self;
        [_adBannerView setFrame:CGRectMake(0, 0, 460, 320)];
        [self.view addSubview:_adBannerView];

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

这显示了每个场景中的iAd。有没有办法在某些场景中隐藏iAd?
苹果的iAd编程指南表示: 只有在您打算向用户显示时才创建横幅视图。否则,它可能会循环播放广告并消耗应用程序可用的广告列表。
这对场景有用吗?
3个回答

4

是的,有一种方法可以在某些场景中隐藏iAd。

- (void)viewDidLoad
{

    [super viewDidLoad];

     //Add view controller as observer
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"hideAd" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"showAd" object:nil];

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

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

    // Present the scene.
    [skView presentScene:scene];
    self.canDisplayBannerAds = YES;

    adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    adView.frame = CGRectOffset(adView.frame, 0, 0.0f);
    adView.delegate=self;
    [self.view addSubview:adView];

    self.bannerIsVisible=NO;  
}
//Handle Notification
- (void)handleNotification:(NSNotification *)notification
{ 
    if ([notification.name isEqualToString:@"hideAd"]) {
        [self hidesBanner];
    } else if ([notification.name isEqualToString:@"showAd"]) {
        [self showBanner];
    }
}

在您想要隐藏横幅的场景中...

[[NSNotificationCenter defaultCenter] postNotificationName:@"showAd" object:nil]; 
//Sends message to viewcontroller to show ad.

[[NSNotificationCenter defaultCenter] postNotificationName:@"hideAd" object:nil];  
//Sends message to viewcontroller to hide ad.

0

最干净的解决方案是声明和实现一个协议,让UIViewController从场景中知道它应该隐藏广告。

@protocol MySceneDelegate <NSObject>
- (void)hideAd;
@end

@interface MyScene : SKScene
@property (weak) id <MySceneDelegate> delegate;
@end

显示场景的视图控制器应该实现一个hideAd方法,并将自己设置为场景的代理。例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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

    // Set the delegate
    [scene setDelegate:self];

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

然后在场景中,您可以调用被设置为委托的视图控制器的hideAd方法:

if ([_delegate respondsToSelector:@selector(closeScene)])
{
    [_delegate performSelector:@selector(hideAd)];
}

hideAd方法中,去掉广告横幅。

要隐藏广告视图,您应该:

将广告视图的框架调整到屏幕外

调整内容视图的框架以覆盖原本承载广告的空间

希望对您有所帮助。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接