簡體   English   中英

重復自我執行選擇器

[英]Repeating self performSelector

我只是在徘徊如果有一種更簡單的方法來重復下面的代碼20秒。 如果有,怎么樣?

[self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
[self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.12];

根據我的意見,請嘗試下面的代碼,

在Controller的.h文件中取一個NSInteger,像這樣,

NSInteger intTmp;

然后在.m文件中調用NSTimer方法,

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testMethod:) userInfo:nil repeats:YES];

並像這樣寫選擇器

-(void)testMethod:(NSTimer *)pTmpTimer
{
    intTmp += 1;

    if(intTmp <= 20)
    {
        [self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
        [self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
        [self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
        [self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
        [self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
        [self performSelector:@selector( move3) withObject:nil afterDelay:0.12];    
    }
    else 
    {
        [pTmpTimer invalidate];
        intTmp = 0;
    }
}

從上面的代碼中,testMethod將調用20次,並根據您的要求,您的代碼將重復20次..

希望對你有效。

快樂的編碼..

您可以使用NSTimer,並且在計時器調用的選擇器中,您可以調用下一個適當的移動方法。

你可以用

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

userInfo可用於將一些數據傳遞給選擇器,選擇器可以從該選擇器接下一個移動或最近調用的移動。

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(invokeMove:) userInfo:[NSNumber numberFromInt:1] repeat:NO];

你的選擇器可能是:

-(void)invokeMove:(id)nextMove
{ 
    if ([nextMove isKindOfClass: [NSNumber class]])
    {
        int veryNextMove = 0;
        switch ([nextMove intValue])
        {
           case 1:
              veryNextMove = 1;
           case 2:
              veryNextMove = 2;
           case 3:
              veryNextMove = 3;
        }
        if (veryNextMove == 0)
            return;
        NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval 0.2 target:self selector:@selector(invokeMove:) userInfo:[NSNumber numberFromInt:2] repeat:NO];
        //Assuming you use ARC. 
     }        
}

安排一個間隔為1的計時器,並在選擇器中編寫您的代碼。

timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(callMethods) userInfo:nil repeats:YES];

選擇器方法

    - (void) callMethods {
        static int i = 0;
       if(i < 19) {
           //your code here
         for(int j=0; j<2 ;j++) {
           [self performSelector:@selector( move1) withObject:nil afterDelay:(j*8)/10];
           [self performSelector:@selector( move2) withObject:nil afterDelay:((j*8)/10)+0.2];
           [self performSelector:@selector( move3) withObject:nil afterDelay:((j*8)/10)+0.4];
         }

        }
        else {
           i = 0;
           [timer invalidate];
        }
      i++;
      }
-(void)trickShot{
[self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
[self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.12];
[self performSelector:@selector( trickShot) withObject:nil afterDelay:20];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM