вызовите метод один раз из другого метода, на котором есть CADisplayLink - PullRequest
0 голосов
/ 12 ноября 2011

Я хотел бы вызвать из метода 'method1' другой метод 'method2'.Проблема заключается в том, что существует CADisplayLink для 'method1', и когда я хочу вызвать 'method2' из 'method1', он вызывает его со скоростью 60 кадров в секунду, так что я просто хочу, чтобы он вызывал его один раз.Я знаю, что должен использовать переменную BOOL, но я не знаю, как их использовать.Может кто-нибудь мне помочь ?извините за мой английский, я французский: /

// РЕДАКТИРОВАТЬ: существует метод CADisplayLink для method1:

-(void)method1{
if(
if ( leScore % 20000 == 0) {
[self method2];

}

-(void)method2{

etatJeu = arc4random() / (UINT_MAX/3);

switch(etatJeu) {
    case 0: /* top */
        etatJeu=kEtatJeu2;
        break;
    case 1: /* bottom */
        etatJeu=kEtatJeu3;              
        break;
    case 2: /* bottom */
        etatJeu=kEtatJeu4;              
        break;
    default:
        break;


}

так что каждый раз 'leScore% 20000 == 0 'вызовите одноразовый метод2.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Если вы хотите, чтобы вызов метода происходил только один раз, используйте bool следующим образом:

@interface SomeClass {
    BOOL method2RunFlag; // set to NO in init
}
@end

// ... in your method1

if( method2RunFlag == NO ) {
    // call your method2
    method2RunFlag = YES;
}

На основании вашего отредактированного кода выше:

-(void)method1{
if( method2RunFlag == NO ) {
method2RunFlag = YES;
  if ( leScore % 20000 == 0) {
    [self method2];
  }
    // wait 1 second before able to call again
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(resetMethod2RunFlag:) userInfo:nil repeats:NO];
}
- (void)resetMethod2RunFlag:(NSTimer *)timer {
  method2RunFlag = NO;
}

Все еще не совсем уверен, что вы ищете, но это мое лучшее предположение. =)

0 голосов
/ 12 ноября 2011

Возможно, вы захотите создать 2 варианта метода1, один для использования с CADisplayLink, другой в другом месте, возможно, для вызова всего общего кода в вспомогательном методе 1А, но с параметром флага, указывающим, вызывать метод 2 или нет.

...