1

嘿,Stackoverflow 的伙计们!

我需要你的帮助。我正在寻找一种在应用程序启动后仅调用我的方法一次并“保存” UIView 颜色状态的方法。首先,我将向您展示我的代码,以便更好地解释它:

-(void)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只调用一次的方法,但是你可能会想到颜色再也没有被调用过,所以视图在第二次加载时没有颜色。

如果你能帮助我,我真的很感激。

提前致谢,

诺亚

编辑:

我的标题:

@interface ViewController : UIViewController {

    IBOutlet UIView *colorTransparentView;
}


@end
4

2 回答 2

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;
}
于 2013-10-01T21:30:21.893 回答
0

使用 dispatch_once。您可以阅读一般的单例方法,但这是推荐的方法。

于 2013-10-02T03:54:43.927 回答