在延时之后重复调用方法直到达到结束条件

时间:2013-05-11 12:22:37

标签: objective-c delay

我在iphone屏幕上有一个十字准线,当一个亭子(地图上的点)移动到它下面时,我想开始在地图上放大。 当一个亭子落在十字准线下并且不再在它下面的那一刻,我准备好了检测工作。

现在我在psuedo代码中发布它:

- (void) checkForPavilionUnderCrosshair {

   if(new pavilion under crosshair) {
     // start zooming
   }
   else if(just left pavilion under crosshair){
     // stop zooming
   }
}

所以我现在需要做的是继续触发:

mapView setZoom:(mapView.zoom+0.1) animated:NO];

当十字准线离开展馆时,能够阻止这种进步。

我在stackoverflow上做了一些搜索,但我发现的帖子并不包括停止它。我没有在计划中计时的经验,所以有人可以通过告诉我正在寻找什么来帮助我吗?

我试过了 [self performSelector:@selector(zoomTest)withObject:self afterDelay:0.0];

如果我继续触摸地图并移动我的手指,那么就像我想要的那样保持checkForPavilionUnderCrosshair。 但是,当我停止触摸屏幕后,执行选择器被触发,所以如果我触摸屏幕20秒,它会在20秒后触发。

有什么解决方法吗?

1 个答案:

答案 0 :(得分:2)

您可以在方法结束时调用[self performSelector:@selector(checkForPavilionUnderCrosshair) withObject:nil afterDelay:1.0],以便在指定的时间段后再次调用它。请注意,延迟时间以秒为单位。

如果您想要更高级的内容,可以在the Apple docs查看NSTimer,或查看this SO question以获取示例和解释。

如果你决定使用简单的performSelector方法,那么当你不想再重复时,你就不能调用该方法。如果您选择使用NSTimer,请在计时器上调用invalidate以停止它。