重复自我执行选择器

Baz*_*nga 4 iphone xcode ios

我只是在徘徊如果有一种更简单的方法来重复下面的代码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];
Run Code Online (Sandbox Code Playgroud)

Meh*_*tri 6

根据我的意见,请尝试下面的代码,

在Controller的.h文件中取一个NSInteger,像这样,

NSInteger intTmp;
Run Code Online (Sandbox Code Playgroud)

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

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testMethod:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)

并像这样写选择器

-(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;
    }
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码中,testMethod将调用20次,并根据您的要求,您的代码将重复20次..

希望对你有效.

快乐的编码..


Her*_*ker 5

您可以使用NSTimer,并且在计时器调用的选择器中,您可以调用下一个适当的移动方法.

你可以用

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
Run Code Online (Sandbox Code Playgroud)

userInfo可用于将一些数据传递给选择器,选择器可以从该选择器接下一个移动或最近调用的移动.

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

你的选择器可能是:

-(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. 
     }        
}
Run Code Online (Sandbox Code Playgroud)