调用bringSubviewToFront会出错

时间:2011-08-01 18:30:23

标签: iphone objective-c

我已经连续三天尝试将广告整合到我的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];
}

}

2 个答案:

答案 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