2011-08-01 59 views
0

我已經連續三天嘗試將廣告整合到我的iPhone遊戲中。我選擇了mobfox,除了一些與我的Objective-C技能水平低的直接相關的細節外,它一直進展順利。調用bringSubviewToFront會給出錯誤

我有一切工作,除了廣告被UI元素遮擋。所以,我希望把廣告的正面和周圍一派,設法弄清楚這一點:

[self.view bringSubviewToFront:bannerView]; 

然而,因爲代碼是(無效)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:bann erView但不能

-(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

不知道它是否必須是私人的,但你不只是發佈你的真實廣告發布者ID,對嗎? :) – Vladimir

回答

0

您需要添加一個實例變量,或伊娃。最簡單的方法是添加一個屬性並讓編譯器添加變量(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。

+0

感謝您的回覆。我必須承認我不知道該怎麼做,你能握住我的手嗎? 代碼是由承包商編寫的,這樣可以解釋爲什麼我不能做這麼簡單的事情。我正在嘗試和錯誤的方式通過它。 –

+0

太棒了,我現在就試試吧! –

+0

這個技巧!非常感謝 –

0

您需要創建一個實例變量,您將發佈並在viewDidUnload中設置爲零,然後在dealloc發佈。如果使用Apple的llvm 2,則可以在class extension中執行此操作,否則請將其添加到header file