2013-10-01 114 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。一般来说,你可以阅读单身人士的方法,但这是推荐的方法。

相关问题