1

我的接口上的一个按钮,当按住 时,将对我的接口的其他部分执行一系列更改。

例如,一秒钟内一些文本会变成蓝色,然后 UImageView 将改变它的图像两秒钟......等等......

只要按住按钮,这一系列更改将通过相同的步骤循环。

我以前从未使用过 NSTimer,但这是要走的路吗?

4

1 回答 1

3

为此,您不需要 NSTimer,您可以简单地使用 performSelector:withObject:afterDelay: 从一种方法到另一种方法进行排序,直到您重新开始。按住按钮时启动流程,释放按钮时调用cancelPreviousPerformRequestsWithTarget:selector:object:。就像是:

- (void) step1
{
    // turn blue
    [self performSelector:@selector(step2) withObject:nil afterDelay:1.0];
}

- (void) step2
{
    // change image
    [self performSelector:@selector(step3) withObject:nil afterDelay:2.0];
}

- (void) step3
{
    // turn red
    [self performSelector:@selector(step1) withObject:nil afterDelay:3.0];
}

- (void) stopSteps
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step1) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step2) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step3) object:nil];
}

你可以记住当前正在执行的“performSelector”选择器并且只取消那个选择器,但它几乎不值得记住它。

或者,您可以使用 NSTimer 和状态机,但对于您所描述的,上述可能更容易 - 这取决于您的序列的一致性以及是否更容易将您的序列指定为如上所述的一组步骤,或一组数据(在这种情况下,使用某种状态机,使用 NSTimer 或 performSelector:withObject:afterDelay:)

于 2009-06-19T02:36:41.033 回答