2013-06-18 60 views
0

我创建了一个程序,发现一个错误,我似乎无法解决。NSTIMER似乎被忽略

我已经解决了这个问题,重新创建一个全新的项目,但它仍然发生。

问题是,当我按下按钮图像改变,但速度比在NSTIMER中设置的速度快得多,但只有第一次按下按钮。

如果我继续按下按钮,图像以我需要的速度变化。

只发生在第一次圆,我使用的是触及事件(尽管我试图触摸起来INSIDE)

这只是发生在第一时间,是非常重要的是,第一次是一样的与其他时间一样。

我知道各种讨论为的NSTimer的准确性反正,但我不认为这是有关我的问题

,这里是我的.h

- (IBAction)slap:(id)sender { 
    NSString *imagechange4 = [NSString stringWithFormat:@"onehandedplayer2.png"]; 
    //player2 is an UIButton IBOutlet 
    [player2 setImage:[UIImage imageNamed:imagechange4]]; 

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(handsback1) userInfo:nil repeats:NO]; 
} 

-(void)handsback1 { 
    NSString *imagechange3= [NSString stringWithFormat:@"hands rotated.png"]; 
    [player2 setImage:[UIImage imageNamed:imagechange3]]; 
} 
+0

望着这一次 - 从静态字符串,你为什么要创建的字符串传递给'imageNamed:'方法?直接传递字符串有什么问题? – Abizern

+0

我认为它与待加载到内存中的图像滞后有关。在第一次执行这行时[UIImage imageNamed:someImage]; someImage显示延迟加载到内存中。下一次启动someImage时,缓存的图像将被加载。通过给予预期的表现 – IronMan

+0

@IronMan这不是我问的。我在说他应该写作:'[player2 setImage:[UIImage imageNamed:@“onehandedplayer2.png”]];'首先。 – Abizern

回答

0

尝试使用performSelector -

[self performSelector:@selector(handsback1) withObject:nil afterDelay:0.5]; 

这真的很容易&可靠。

+0

嗯。老套。我本来是用'dispatch_after'亲自去的,并且使用了一个块,所以不需要编写回调函数。 – Abizern

+0

好主意 - 只是尝试过,但它又不工作。第一次它以比其他时间更快的速度改变图像,但是当我再次按下按钮时,它会转到正确的时间,等等......非常奇怪 –

+0

实际上,SLAP似乎有延迟按下按钮,发送超时,然后冲过整个过程的其余部分。 –

0

刚刚空闲了几分钟(!)&又遇到了这种情况 - 我想你可能会误认为在图像更改时按下突出显示的按钮 - 是否取消选中按钮的“突出显示的调整图像”属性在IB的属性检查器中?

或许不太可能,但你永远不知道...