Как я могу выполнить селектор после времени без AfterDelay ?!(код не указан) - PullRequest
1 голос
/ 08 сентября 2011

прежде всего спасибо, что ответили на мои вопросы. сейчас я попробовал множество разных способов вызова какой-либо функции в моем коде, но способы, которые я нахожу работающими (executeselector: withobject: afterdelay), сразу же попадают в функцию, и мне нужна функция, чтобы после некоторого времени сделать несколько «если» , Ну, вы можете увидеть код здесь -

-(void)playGame{
    isButtonPressed=NO;

    int minimum=1;
    int maximum=4;
    int randomTime=(arc4random()%(maximum-minimum))+minimum;
    [self performSelector:@selector(ifButtonNotPressed) withObject:nil afterDelay:randomTime];
}

-(void)closingAction{
    NSLog(@"Closing Panel automatic");
    if (randomFrog==1){
        [self performSelector:@selector(animatePanelCloseAction::) withObject:gameImage1_up withObject:gameImage1_down];
    }
    [self performSelector:@selector(playGame) withObject:nil afterDelay:0.25];
}


-(IBAction)buttonAction:(id)sender{

    if (sender == gameButton1 && randomFrog==1){
        [self performSelector:@selector(disableAllButtons)];
        score=score+1;
        isButtonPressed=YES;
        [scoreLabel setText:[NSString stringWithFormat:@"Score:%d",score]]; 
        [self performSelector:@selector(closingAction)];
    }
}

-(void)ifButtonNotPressed{
    if (isButtonPressed==NO){
        [self performSelector:@selector(closingAction)];  
    }
}

Как вы можете видеть, я пытаюсь проверить, была ли нажата кнопка, но она идет внутрь, немедленно проверить ее и выполнить после задержки.

как я могу позвонить после реальной задержки?!

спасибо всем. Эмир.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Попробуйте NSTimer, чтобы решить эту проблему.

if(callTimer)
{
   [callTimer invalidate];
   callTimer=nil;
}
 callTimer=[NSTimer scheduledTimerWithTimeInterval:0.50 target:self selector:@selector(callFunction) userInfo:nil repeats:NO];

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

Не забыл сделать недействительным таймер после вызова функции, означающей аннулирование таймера в конкретной функции.

1 голос
/ 08 сентября 2011

Эй, вы можете использовать класс NSTimer для того же.

- (void)FireTimer : (NSInteger) afterTimeInterval
{
    if (afterTimeInterval > 0) //afterTimeInterval is in seconds
    {
        [NSTimer scheduledTimerWithTimeInterval: afterTimeInterval
                                         target: self
                                       selector: @selector(ResetListAfterExpiration:)
                                       userInfo: nil
                                        repeats: NO];
    }
}

- (void)ResetListAfterExpiration: (NSTimer *)timer
{
     // your actions
     … … …

     [timer invalidate]; // must be done to prevent memory leak
}

// Теперь вы вызываете метод FireTimer из любого места, где вам нужно, и он будет ждать в течение секунд afterTimeInterval и вызываете метод ResetListAfterExpiration. Это твой ответ.

...