![](/img/trans.png)
[英]How to stop Sprite Kit from reinitializing the scene with iAd banner
[英]Hide iAd in Sprite Kit Scene
我已使用以下代碼將iAd添加到我的Sprite Kit游戲中:
在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?
Apple的iAd編程指南說:
只有在打算將其顯示給用戶時才創建橫幅視圖。 否則,它可能會循環播放廣告並耗盡您應用的可用廣告列表。
場景有可能嗎?
是的,有一種方法可以在某些場景中隱藏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.
好吧,在您的特定場景中,請在下面的鏈接中關注此問題的Apple指南(與您的問題相同),查看“banner view best practices”部分: https : //developer.apple.com/library/ IOS /文檔/ userexperience /概念性/ iAd_Guide / WorkingwithBannerViews / WorkingwithBannerViews.html#// apple_ref / DOC / UID / TP40009881-CH4-SW3
在摘要中他們說:“從視圖層次結構中刪除橫幅視圖,將其委托設置為nil
”
最干凈的解決方案是聲明並實現一個協議,讓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
方法中刪除橫幅。
要隱藏橫幅視圖,您應該:
將橫幅視圖的框架調整為屏幕外框調整內容視圖框架的大小以覆蓋最初托管橫幅的空間
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.