每个应用启动时只调用一次方法

时间:2013-10-01 21:24:55

标签: iphone ios objective-c cocoa-touch

嗨,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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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