我已经连续三天尝试将广告整合到我的iPhone游戏中。我选择了mobfox并且它一直很顺利,除了一个与我不太合适的Objective-C技能水平直接相关的细节。
除了广告被UI元素遮挡外,我的一切工作都有效。所以我想把广告带到前面并用Google搜索并设法弄清楚:
[self.view bringSubviewToFront:bannerView];
但是,只有代码在(void)viewDidLoad中才有效。然后我尝试在我的代码的其他地方使用相同的代码,在UI初始化等,但我得到一个错误,没有声明bannerView。我非常明白xcode告诉我的是什么,但是我没有简单的声明和完成的技能,我不知道怎么回事,所以我问你是否可以帮助我?
我想要做的就是从代码中的任何地方随意将bannerView带到前面。 你能救我吗?
祝你好运 马库斯
以下是mobfox代码
以下是viewDidLoad
// MOBFOX Starts
// create the banner view just outside of the visible area
MobFoxBannerView *bannerView = [[MobFoxBannerView alloc] initWithFrame:
CGRectMake(-800, self.view.bounds.size.height - 240, 320, 50)];
bannerView.delegate = self; // triggers ad loading
//bannerView.backgroundColor = [UIColor darkGrayColor]; // fill horizontally
bannerView.transform = CGAffineTransformMakeRotation(M_PI / 2.0); //MARCUS haxx
//bannerView.refreshAnimation = UIViewAnimationTransitionCurlDown;
[self.view addSubview:bannerView];
[self.view bringSubviewToFront:bannerView];
NSLog(@"MobFox: Ad initated and placed offscreen");
//
这是在viewDidLoad
之后 //MOBFOX STARTS HERE
#pragma mark MobFox Delegate
- (NSString *)publisherIdForMobFoxBannerView:(MobFoxBannerView *)banner
{
return kMyMobFoxPublisherId;
}
- (void)mobfoxBannerViewDidLoadMobFoxAd:(MobFoxBannerView *)banner
{
NSLog(@"MobFox: did load ad and placed on screen");
// animate banner into view
//[UIView beginAnimations:@"MobFox" context:nil];
//[UIView setAnimationDuration:1];
banner.frame = CGRectMake(135, 140, 320, 50);
[UIView commitAnimations];
}
- (void)mobfoxBannerView:(MobFoxBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"MobFox: did fail to load ad: %@", [error localizedDescription]);
// animate banner outside view
//[UIView beginAnimations:@"MobFox" context:nil];
//[UIView setAnimationDuration:1];
banner.frame = CGRectMake(-800, self.view.bounds.size.height - 240, 320, 50);
[UIView commitAnimations];
}
//MOBFOX ENDS HERE
我想调用bringSubViewToFront的示例:bannerView但不能
-(void) settitleMenuToFront {
[self.view bringSubviewToFront:titleScreenImg];
[self.view bringSubviewToFront:highScoreTable];
[self.view bringSubviewToFront:ContinueButton];
[self.view bringSubviewToFront:highscoreButton];
[self.view bringSubviewToFront:newgameButton];
if (loadingScreen.alpha > 1) {
[self.view bringSubviewToFront:loadingScreen];
}
}
答案 0 :(得分:0)
您需要添加实例变量或ivar。最直接的方法是添加一个属性,让编译器添加变量(ivar)来存储属性值。
在标题文件中,添加一行:
@property (nonatomic, retain) MobFoxBannerView *bannerView;
在您的实施中,在顶部附近添加此行:
@synthesize bannerView;
在-dealloc
-(void)dealloc {
// ...
[bannerView release];
}
然后在创建视图时,设置属性:
self.bannerView = [[[MobFoxBannerView alloc] initWithFrame:
CGRectMake(-800, self.view.bounds.size.height - 240, 320, 50)]
autorelease];
然后,您可以在其余代码中的任何位置引用self.bannerView。
答案 1 :(得分:0)
您需要创建一个将要发布的实例变量,并在viewDidUnload
中设置为nil,然后在dealloc
中释放。如果使用Apple的llvm 2,您可以class extension执行此操作,否则请将其添加到header file。