2013-10-01 113 views
1

嘿傢伙在Stackoverflow!每次啓動應用程序只需撥打一次電話

我需要您的幫助。我正在尋找一種方法來呼叫我的方法只有一次應用程序已經推出和「保存」的UIView的顏色的狀態。起初,我會告訴你我的代碼,我可以以更好的方式解釋它:

- (空)viewWillAppear中:(BOOL)動畫{

NSArray *colors = [NSArray arrayWithObjects:[UIColor myWhiteColor],[UIColor myBlueColor],[UIColor myCyanColor],[UIColor myGreenColor],[UIColor myOrangeColor],[UIColor myPurpleColor],[UIColor myRedColor],[UIColor myViolettColor],[UIColor myYellowColor], nil]; 

NSInteger randomIndex = random() % [colors count]; 

colorTransparentView.backgroundColor = [colors objectAtIndex:randomIndex]; 
colorTransparentView.opaque = NO; 
colorTransparentView.alpha = 1.0; 

}

現在我向你解釋我的問題。 正如你所看到的,每次調用「viewWillAppear」方法時,上面的代碼都會改變UIView的顏色。該代碼隨機將與IBOulet鏈接的UIView(在.xib中)的顏色更改爲頭文件。問題是,每當我回到視圖,我會得到不同的顏色。

但是,我只想在應用程序啓動後設置UIView的隨機顏色。這種顏色應該是停留,直到應用程序是關閉從多任務。我看不出有什麼辦法解決這個問題。我試圖調用applicationDidFinishedLaunchingWithOptions方法中的代碼,但我並不是很成功。

另外我嘗試了dispatch_once方法只調用它一次,但正如你可能會想到的顏色再也沒有被調用過,所以視圖在第二次加載時沒有顏色。

我真的會appreceate如果你能幫助我這個。

由於事先

諾亞

編輯:

我的頭:有關使用一個靜態變量

@interface ViewController : UIViewController { 

    IBOutlet UIView *colorTransparentView; 
} 


@end 
+0

爲什麼不在'viewDidLoad'中設置顏色? – jlehr

+0

@jlehr它是一樣的!它沒有任何區別! – MasterRazer

+0

它可能有助於查看「colorTransparentView」的聲明。視圖在運行時不會奇蹟般地丟失背景顏色。 – jlehr

回答

3

什麼?用0初始化它,然後在你的視圖中改變顏色後會出現。將其設置爲1並繼續檢查它。

int static colortaken = 0; 
int static colorindex; 
- (void)viewWillAppear:(BOOL)animated 
{ 

    NSArray *colors = [NSArray arrayWithObjects:[UIColor myWhiteColor],[UIColor myBlueColor],[UIColor myCyanColor],[UIColor myGreenColor],[UIColor myOrangeColor],[UIColor myPurpleColor],[UIColor myRedColor],[UIColor myViolettColor],[UIColor myYellowColor], nil]; 
    if (colortaken == 0) 
    { 
     NSInteger randomIndex = random() % [colors count]; 
     colorindex = randomIndex; 
     colorTransparentView.backgroundColor = [colors objectAtIndex:randomIndex]; 
     colorTransparentView.opaque = NO; 
     colorTransparentView.alpha = 1.0; 
    } 
    else 
    { 
     // do nothin 
     colorTransparentView.backgroundColor = [colors objectAtIndex:colorindex]; 
     colorTransparentView.opaque = NO; 
     colorTransparentView.alpha = 1.0; 
    } 

    // at end 
    colortaken = 1; 
} 
+0

你能用我的代碼顯示一個例子嗎?那太好了! – MasterRazer

+0

是否有效? – hasan83

+0

不!就像dispatch_once方法一樣!在我更改爲不同的控制器後,視圖會在啓動時加載顏色,並返回沒有顏色。 :( – MasterRazer

0

使用dispatch_once。一般來說,你可以閱讀單身人士的方法,但這是推薦的方法。

相關問題