2011-09-08 3 views
1

먼저 내 질문에 감사드립니다. 지금, 내 코드에서 어떤 함수를 호출하는 많은 다른 방법을 시도했지만 그것이 작동하는 방법 (performselector : withobject : afterdelay)은 함수에 즉시 들어가고 함수는 "if if"를 무작위로 만들 필요가있다. 타임스. 당신이 메신저 버튼을 누를 경우 확인하기 위해 노력하고 있지만이 immeditlly을 확인하고 지연 후에 그것을 수행하는 내부 가고, 볼 수 그럼 당신은 여기 -AfterDelay없이 시간이 지나면 선택기를 수행하는 방법은 무엇입니까? (코드 unside)

-(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)]; 
    } 
} 

의 코드를 볼 수 있습니다.

어떻게 실제 지연 후 전화 할 수 있습니까?!

감사합니다. amir.

답변

2

이 문제를 해결하려면 NSTimer를 사용하십시오.

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

이 도움으로 특정 시간 간격으로 모든 기능을 호출 할 수 있습니다. 함수 호출을 다시 호출하면 현재 타이머가 무효화되고 그에 대한 새 타이머가 작성됩니다.

함수를 호출 한 후 타이머를 무효화하는 것을 잊어 버리지 않았습니다. 특정 함수에서 타이머를 무효화하는 것을 의미합니다.

1

안녕하세요. 동일한 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를 호출합니다. 그것이 당신의 대답입니다.

관련 문제