2012-07-10 22 views
4

我只是徘徊如果有一个简单的方法重复20秒以下的代码。如果有,如何?重复自我performSelector

[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]; 

回答

6

按我的意见刚刚尝试下面这段代码,

拿一个NSInteger的在你的控制器的.h文件中,这样,

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次..

希望它为你工作。

编码愉快..

+0

20次? hmmmm。那20秒怎么样? – Bazinga 2012-07-10 08:33:28

+0

请参阅每1秒调用一次的testMethod,以便它将该intTmp递增20次,并且当intTmp大于20时,它将进入其他条件并且定时器失效。 – 2012-07-10 09:18:14

+0

谢谢你 – Bazinga 2012-07-12 08:30:36

5

您可以使用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. 
    }   
} 
+0

的NSTimer scheduledTimerWithTimeInterval? – Bazinga 2012-07-10 08:19:22

+0

我会编辑答案。 – 2012-07-10 08:23:04

3

与附表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++; 
     } 
0
-(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]; 
}